コマンド前の一時割り当ては機能しませんか? [コピー]

コマンド前の一時割り当ては機能しませんか? [コピー]

私はa初期ミッションの後に変化をもたらすと予想しました。しかし、私は何も得られませんでした。

tomas@tomas-Latitude-E4200:~$ echo $a

tomas@tomas-Latitude-E4200:~$ a=0 echo $a

tomas@tomas-Latitude-E4200:~$

a以前に設定すると、同様の予期しない動作が発生しました。

tomas@tomas-Latitude-E4200:~$ a=0
tomas@tomas-Latitude-E4200:~$ a=1 echo $a
0

素晴らしい?

答え1

一時的な環境変数の割り当てが適用されます。期間以前ではないコマンドの実行。特に、コマンドラインの解析中はまだ効果的ではありません。説明のために、次の2つのコマンドを検討してください。

$ A=1 sh -c "echo $A"

$ A=1 sh -c 'echo $A'
1

コマンド例の違いは、最初のコマンドで変数置換が発生することです。今後 sh -c、そしてそのようなことが起こりました期間実行sh -c

技術的には、シェルは一時変数の割り当てを子プロセスの環境に追加します。これはシェル環境に追加されません。

関連情報