スラッシュを含む文字列をファイルとして処理せずにsedにどのように渡すことができますか? (該当するディレクトリやファイルはありません)

スラッシュを含む文字列をファイルとして処理せずにsedにどのように渡すことができますか? (該当するディレクトリやファイルはありません)

スラッシュを含む文字列を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_valuesedmy/value

上記operandの変数のコマンド置換は、使用時に出力されますechomyecho $operand

別の方法は次のとおりです。

operand="$(printf '%s\n' "$my_value" | sed -n -e 's/^\(.*\)\/.*/\1/p')"

printfこれは、含まれている他の文字列に対してechoが機能しないようにするより良いケースの1つです。この場合は発生しませんが、他の場合には発生する可能性があります。

おすすめ記事