$ bash -c "for VAR in {0..9}; do echo $VAR; done;
准确包含引号中内容的 shell 脚本的行为符合预期。
结果是 10 个空行 - 无论我以哪种方式轻微编辑此行(即/bin/bash
或sh
代替bash
, 或使用${VAR}
, "$VAR"
,"${VAR}"
或不同的变量名称),我都会得到输出到文件的相同结果。
如果我使用之前用 just 设置的变量名
$ 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;"