次のように、環境変数を前に追加してコマンドに渡すことができることを知っています。
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を実行して環境を変更します(このコマンドを効果的に実行します)。