env_variable=value && コマンドは正確に何をしますか?

env_variable=value && コマンドは正確に何をしますか?

次のように、環境変数を前に追加してコマンドに渡すことができることを知っています。

env_variable=value command

ところで、今日誤って&&変数とコマンドの間に以下を追加しました。

env_variable=value && command exactly
                    ^
                    ^

正しいアプローチとどう違うのだろうか。を使用してコマンドを一緒に接続できることを知っています&&ところで、興味深いのは、コマンドが変数を受け取らないことです。なぜですか?誰かが2番目のバリアントが最初のバリアントとまったく異なるのか、そしてなぜコマンドに変数が表示されないのかを説明できれば幸いです。ありがとう

答え1

foo=bar && somecmd

ほぼ同じです(作業が失敗する可能性が低いため)。

foo=bar; somecmd

(別の行に)と同じ

foo=bar
somecmd

これにより、名前付きシェル変数に値が割り当てられ、fooコマンドが実行されますsomecmd。 edfooでない場合export(デフォルトではシェル変数ではない)には表示されませんが、somecmd同じシェルで使用できます。

たとえば、参照してください。

答え2

前のコマンドがすべて正常に実行された場合は、&& を使用してコマンドを 1 行にリンクして順次実行できます。それぞれはそのままシェル内で実行され、シェルを変更しません。したがって、各プロセスは実行されるシェルから環境変数を取得します。

$ LC_ALL=C && commandB

--> LC_ALL=C 実行、シェルに 0 が返されると commandB 実行 (デフォルトシェル環境を使用)

$ LC_ALL=C commandA

--> LC_ALL変数をCに設定し、commandAを実行して環境を変更します(このコマンドを効果的に実行します)。

関連情報