$ bash -c "for VAR in {0..9}; do echo $VAR; done;
引用符で囲まれた内容を正確に含むシェルスクリプトは、期待どおりに機能します。
結果は10本の空行です。この行をどのように編集しても(つまり、/bin/bash
代わりに、、、または他の変数名を使用して)、ファイルに同じ結果が出力されます。sh
bash
${VAR}
"$VAR"
"${VAR}"
先に設定した変数名を でのみ使用すると、
$ VAR=1
1、10回出力されます。
私のユーザーにとって、両方とも.bash
完全に正常に見えます。.bash_profile
これは私を狂わせていますが、非常に明確なものを見逃していますか?
答え1
次のコマンドを使用してデバッグをオンにすると、何が起こっているかを確認できますset -x
。
$ set -x
$ bash -c "for VAR in {0..9}; do echo $VAR; done;"
+ bash -c 'for VAR in {0..9}; do echo ; done;'
したがって、式の周囲に二重引用符を使用すると、-c
対話型の親シェル拡張$VAR
(空の文字列まで)が可能になります。一重引用符を使用すると、期待どおりに機能します。
bash -c 'for VAR in {0..9}; do echo $VAR; done;'
または脱出するには$
:
bash -c "for VAR in {0..9}; do echo \$VAR; done;"