私は次のことができました:
X=123 cat <<EOF
X is $X
EOF
はるかに簡単です。
X=123 echo $X
bashの修正をインストールした後でも、最初の修正はまだMac OS Xで動作するようですが、AWSのUbuntu 14.04インスタンスでは動作しなくなったようです。これらの環境変数にアクセスできecho
なくcat
なったのはなぜですか?もう1つのことは、NodeJSアプリケーションに環境変数を渡すときに問題がないようです。
cat <<EOF > test.js
console.log('X is ' + process.env.X);
EOF
X=123 node test.js
これはbashスクリプトでも動作するようです。
cat <<EOF > test.sh
echo X is \$X
EOF
chmod +x test.sh
X=123 ./test.sh
ベストアンサー1
POSIXシェルで以下を作成するとき
X=123 echo $X
$X
コマンド全体を実行する前に拡張されます。つまり、最初に設定されていない場合は、次のように$X
なります。
X=123 echo
次に実行します。シェルが実行する操作をおおよそ見ることができますset -x
。
$ set -x
$ X=123 echo X=$X
+ X=123
+ echo X=
X=
$ set +x
環境に引き続きアクセスできることを確認できますecho
(実際に実行する前に拡張されるシェル自体)。echo
$ X=123 eval 'echo $X'
123
問題はcat <<EOF
似ています。関連して、以前のbash
バージョン(4.1より前)には、CHANGES
ドキュメントに次のようなバグがあります。
ここでは、ドキュメントの変数が一時的な環境で見えるように拡張されるバグを修正しました。
これがMac OS Xで観察される動作の理由かもしれません。このエラーに頼らないでください。