スラッシュを含む文字列をsedに渡して値を抽出する必要がありますが、そうしようとすると、その文字列をディレクトリ/ファイルとして扱い、「対応するディレクトリまたはファイルがありません」というエラーが発生します。私はこれがパスとして読み取られ、意図した効果ではないときにファイルを見つけようとするためだと仮定します。例:
my_value="my/value"
operand="$($my_value | sed -n -e 's/^\(.*\)\/.*/\1/p')"
# Expected echo $operand : my
注:私はbashスクリプトに最初に触れたので、これは間違ったアプローチかもしれません。
ベストアンサー1
目的の出力がecho $operand
ある場合、my
次の1つの欠落を除いて構文は問題ありません。
operand="$(echo $my_value | sed -n -e 's/^\(.*\)\/.*/\1/p')"
その値をstdoutに送信して操作を実行するには、変数を使用する必要がecho
あります。変数値であるファイルまたはディレクトリが実際に呼び出されないため、エラーが発生します。my_value
sed
my/value
上記operand
の変数のコマンド置換は、使用時に出力されますecho
。my
echo $operand
別の方法は次のとおりです。
operand="$(printf '%s\n' "$my_value" | sed -n -e 's/^\(.*\)\/.*/\1/p')"
printf
これは、含まれている他の文字列に対してechoが機能しないようにするより良いケースの1つです。この場合は発生しませんが、他の場合には発生する可能性があります。