この環境変数が設定されていないのはなぜですか?

この環境変数が設定されていないのはなぜですか?
  1. シェルが外部実行可能ファイルをコマンドとして実行すると、環境変数を実行可能ファイルに渡すことができます。

    $ var=3 /bin/echo `$var`
    
    $ var=3 bash -c "/bin/echo '$var'"
    

    どちらも何も出力しません。

  2. プログラムの実行時に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

おすすめ記事