2016-04-03 13 views
1

私が知る限り、変数割り当てをbashコマンドの前に置くと、変数はすぐに有効になります。そして、それはそのコマンド内でのみ影響を与えます。プレフィックス変数代入がエコーで機能しない

私はbashで、このコマンドを試してみました:

V=1 echo $V 

しかし1は、私が期待したものではありません、端末で印刷されていません。では、なぜそれがうまくいかないのですか?

+1

こちらをご覧ください:http://unix.stackexchange.com/questions/126938/why-is-setting-a-variable-before-a-commandを-legal-in-bash –

答えて

2

変数は、コマンドが評価されている(展開されている)ときではなく、それに続くコマンドの環境で渡されます。任意の変数の展開はシェルによって早く行われます。

$ V=1 env | grep V= 
V=1 

それが働いて得るために:

$ V=1; echo $V 
1 
+0

実際に 'V = 1 eval echo \ $ V'は環境変数に設定されるまで、変数' V'の展開を遅らせるので動作します。もちろん、セミコロン(;)が引き起こす恒久的な変更がなければ、もちろんです。 –

+0

@BinaryZebra間違いなく、それは関係するいくつかのトリックを持つ怠惰な評価です。ほとんどの場合、避けてください。 – heemayl

+0

私は "トリック"を意味しませんでした。遅延評価の明示的なデモンストレーション。はい、私はそれが "生産コード"で避けるべきであることに同意します。しかし、それは学習ツールとして非常に貴重です。 –

関連する問題