私が知る限り、変数割り当てをbashコマンドの前に置くと、変数はすぐに有効になります。そして、それはそのコマンド内でのみ影響を与えます。プレフィックス変数代入がエコーで機能しない
私はbashで、このコマンドを試してみました:
V=1 echo $V
しかし1は、私が期待したものではありません、端末で印刷されていません。では、なぜそれがうまくいかないのですか?
私が知る限り、変数割り当てをbashコマンドの前に置くと、変数はすぐに有効になります。そして、それはそのコマンド内でのみ影響を与えます。プレフィックス変数代入がエコーで機能しない
私はbashで、このコマンドを試してみました:
V=1 echo $V
しかし1は、私が期待したものではありません、端末で印刷されていません。では、なぜそれがうまくいかないのですか?
変数は、コマンドが評価されている(展開されている)ときではなく、それに続くコマンドの環境で渡されます。任意の変数の展開はシェルによって早く行われます。
$ V=1 env | grep V=
V=1
それが働いて得るために:
$ V=1; echo $V
1
実際に 'V = 1 eval echo \ $ V'は環境変数に設定されるまで、変数' V'の展開を遅らせるので動作します。もちろん、セミコロン(;)が引き起こす恒久的な変更がなければ、もちろんです。 –
@BinaryZebra間違いなく、それは関係するいくつかのトリックを持つ怠惰な評価です。ほとんどの場合、避けてください。 – heemayl
私は "トリック"を意味しませんでした。遅延評価の明示的なデモンストレーション。はい、私はそれが "生産コード"で避けるべきであることに同意します。しかし、それは学習ツールとして非常に貴重です。 –
こちらをご覧ください:http://unix.stackexchange.com/questions/126938/why-is-setting-a-variable-before-a-commandを-legal-in-bash –