私は初めて環境変数に触れ、環境変数をスクリプトに渡して再定義する方法をテストしています。
動作をテストするために、testenv.sh
次の名前の簡単なスクリプトを作成しました。
#!/bin/bash
echo $COLOR
だから私が走るとき
$ env COLOR=RED ./testenv.sh
予想されるstdoutを取得しますRED
。
しかし、私の質問は、次のコマンドを実行する理由です。
$ env COLOR=RED echo $COLOR
上記のような結果は得られません。実際には空の標準出力です。
答え1
$COLOR
env
呼び出される前にシェルによって拡張されます/bin/echo
。
env
変数を拡張するシェルスクリプトを呼び出さないと動作しません。
でも:
COLOR=RED echo $COLOR
新しい環境を設定する前にシェル変数を拡張するため、期待どおりに機能しません。
2行に分ける必要があります。
COLOR=RED
echo $COLOR
期待どおりに動作するようにしてください。
電話する場合:
env COLOR=RED sh -c 'echo $COLOR'
これは、単一引用符が変数の拡張を防ぎ、新しい環境で新しいシェルが実行されると変数の拡張が遅れるために機能します。