env
マニュアルページには、指定された環境変数が設定され、指定されたコマンドが実行されることが記載されています。それを知って、私は
env A=42 echo ${A}
が42
を印刷することを期待したいが、それは代わりに何も表示されません。私は間違って何をしていますか?
env
マニュアルページには、指定された環境変数が設定され、指定されたコマンドが実行されることが記載されています。それを知って、私は
env A=42 echo ${A}
が42
を印刷することを期待したいが、それは代わりに何も表示されません。私は間違って何をしていますか?
パラメータ拡張は、シェルがコマンドを実行する前に発生します。 A
現在値3を有しているのであれば、コマンドラインは、第1のシェルコマンドが実行されるべきであるものを識別する次に
env A=42 echo 3
と(env
)として評価されます。その時点でenv
は新しい環境を構築します。ここではA
の値が42で、その環境でコマンドecho 3
が実行されます。
がと評価されてからecho
が実行されたためです。これは、echoが以前の環境(値なし...)のA
の値を持つ引数を取得することを意味します。エコーは、実際には前に `$ {A}は`評価さおそらくため
[email protected]:~$ env A=42 bash -c 'echo ${A}'
42
別の解決策:env E = 42 printenv E –
@ M.Dogruありがとう、 'printenv'(エキスパートではない)について知りませんでした。その他の情報:http://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv –
:
一つの解決策は、
echo
と共に、後の段階で展開される文字列リテラル(単一引用符)などのパラメータを渡すことです実行する –ええ、それが理由です。ありがとう! – Martin