bash -c“ v = value; echo $ v”は何も表示しません


回答:


18

ここには2つのシェルがあります。

  • 呼び出しシェル、これを実行している対話型シェル

  • によって生成された非ログイン、非インタラクティブシェル bash -c

ここで問題は、二重引用符内で変数がそれぞれの値に展開されることです。これはどのシェルにも当てはまります。

したがって、二重引用符を使用したように、変数の展開$vは実際には、呼び出されたシェルではなく、呼び出し元のシェルで行われています。しかし、宣言v=valueは呼び出された非対話型シェルで行われています。

したがって、全体として、呼び出されたシェルで定義され、呼び出し元のシェルで(事前に)展開された変数があります。値変数が呼び出し側シェルで設定されていないため、出力には何も表示されません。

ここで、変数の定義と展開をスポーンされたシェルで実行するには、単一引用符を使用するか、エスケープし$ます。

$ bash -c "v=value; echo $v"

$ bash -c 'v=value; echo $v'
value

$ bash -c "v=value; echo \$v"
value

1

二重引用符$vを使用すると、インタラクティブシェルに置き換えられます。一重引用符を使用します。

$ bash -c 'v=value;echo $v'
value
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.