コマンドを使用して同じ行で実行すると、「環境変数」はどのように機能しますか? [コピー]

コマンドを使用して同じ行で実行すると、「環境変数」はどのように機能しますか? [コピー]

Pythonスクリプトに環境変数を提供し、次を使用してすぐに印刷できます。

$ FOO="bar" python -c "import os; print(os.environ.get('FOO'))"
bar

ただし、次の場合は同じことは当てはまりませんecho

$ FOO="bar" echo $FOO
 
$ echo $PWD
/home/nntin

最初の質問:なぜ印刷できないのですかbar


複数のコマンドを実行する場合、環境変数は最初のコマンドにのみ適用されます。

$ FOO="bar" python -c "import os; print(os.environ.get('FOO'))" && python -c "import os; print(os.environ.get('FOO'))"
bar
None

以下を使用して問題を解決できます。

$ FOO="bar" python -c "import os; print(os.environ.get('FOO'))" && FOO="bar" python -c "import os; print(os.environ.get('FOO'))"
bar
bar

しかし、多くの環境変数を渡すと扱いにくくなります。

2番目の質問:両方にどのように適用しますか?たとえば、2つのコマンドを順番に実行したいのですが、&&コマンドラインで環境変数を2回ではなく1回だけ定義したいと思います。

同じコマンドラインで環境変数を設定することをお勧めします。環境変数は変更される可能性があるため、複数のコマンドを順番に実行するよりも1行のコマンドを実行する方が簡単です。むしろ1つの値だけを変更したいと思います。

PS:混乱したタイトルを理解してください。名前が何なのか、どこで見つけることができるのかわかりません。このようなコードを実行すると、環境変数は次のコマンドラインで使用できないため、永久に設定されません。ただし、コードは設定された環境変数のように動作します。タイトルと説明を自由に変更してみてください。

答え1

最初の例では、次のようになります。

コマンドラインを評価し、「bar」の値を環境変数「FOO」にロードし、Pythonコードを実行し、環境変数「FOO」を評価し、その内容を印刷します:「bar」

2番目の例:コマンドラインが評価され、「bar」値が「FOO」変数にロードされますが、echo $FOO$ FOOと同時に評価されます。まだロードされていませんしたがって、空の文字列をエコーし​​ます。

3番目の例では、&&2つのコマンドが分離されており、一時的な環境変数は保存されません。あなたは脱出できます。

FOO='bar' ( python -c "import os; print(os.environ.get('FOO'))" && FOO="bar" python -c "import os; print(os.environ.get('FOO'))" )

関連情報