为什么这个基本的 bash for 循环中没有理解循环变量?

为什么这个基本的 bash for 循环中没有理解循环变量?
$ bash -c "for VAR in {0..9}; do echo $VAR; done;

准确包含引号中内容的 shell 脚本的行为符合预期。

结果是 10 个空行 - 无论我以哪种方式轻微编辑此行(即/bin/bashsh代替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;"

相关内容