2016-07-13 11 views
1

envマニュアルページには、指定された環境変数が設定され、指定されたコマンドが実行されることが記載されています。それを知って、私は

env A=42 echo ${A} 

42を印刷することを期待したいが、それは代わりに何も表示されません。私は間違って何をしていますか?

+5

一つの解決策は、echoと共に、後の段階で展開される文字列リテラル(単一引用符)などのパラメータを渡すことです実行する –

+0

ええ、それが理由です。ありがとう! – Martin

答えて

5

パラメータ拡張は、シェルがコマンドを実行する前に発生します。 A現在値3を有しているのであれば、コマンドラインは、第1のシェルコマンドが実行されるべきであるものを識別する次に

env A=42 echo 3 

env)として評価されます。その時点でenvは新しい環境を構築します。ここではAの値が42で、その環境でコマンドecho 3が実行されます。

5

と評価されてからechoが実行されたためです。これは、echoが以前の環境(値なし...)のAの値を持つ引数を取得することを意味します。エコーは、実際には前に `$ {A}は`評価さおそらくため

[email protected]:~$ env A=42 bash -c 'echo ${A}' 
42 
+1

別の解決策:env E = 42 printenv E –

+0

@ M.Dogruありがとう、 'printenv'(エキスパートではない)について知りませんでした。その他の情報:http://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv –

関連する問題