シェルが外部実行可能ファイルをコマンドとして実行すると、環境変数を実行可能ファイルに渡すことができます。
$ var=3 /bin/echo `$var` $ var=3 bash -c "/bin/echo '$var'"
どちらも何も出力しません。
プログラムの実行時に
exec
環境変数も機能することを確認したいと思います。$ bash $ unset var; $ var=3 exec /bin/echo '$var' $var $ exec var=3 /bin/echo '$var' bash: exec: var=3: not found
変数の拡張を防ぐために、周囲に一重引用符を使用してください$var
。防御力はちょっと過度なようです。
上記の場合、この環境変数が設定されていないのはなぜですか?
実行しているプログラムに環境変数を適用できますかexec
?
ありがとうございます。
ベストアンサー1
パラメータ拡張は魔法のようには起こらず、これを行うにはシェルが必要であることに注意してください。
var=3 /bin/echo `$var`
これで何をしたいのかわかりません。ここでは逆引用符が不適切です(コマンドを実行してその出力に置き換えられます)。
var=3 bash -c "/bin/echo '$var'"
引数拡張は割り当て前に発生するため機能しないため、現在のシェルが(未定義であると仮定)に"/bin/echo '$var'"
変更され、サブシェルが実行されます。/bin/echo ''
var
/bin/echo ''
努力する
var=3 bash -c 'echo $var'
逆に、一重引用符は現在のシェルのパラメータを保護し、新しいシェルが実行されるときに使用されます。
echo $var
それはあなたが期待するように働きます。
2番目のポイントでは、私の元のコメントはまだ適用されます。環境を試して、何が起こるかを確認するには、そのenv
出力を実行してフィルタリングします。
var=3 env | grep var
var=3 exec env | grep var