为什么我不能单引号变量?

为什么我不能单引号变量?

所以这段代码工作得很好,“$i”用双引号引起来:

for ((i=0; i <= 10; i++)); do
    printf '%d\n' "$i"
    done

但是,如果我将“$i”放在单引号('$i')中,我只会得到 10 次迭代:

bash: printf: $i: invalid number
0

为什么?这个问题包含一个错误报告,它不像每个人都说的那样具有哲学性。在确定这是一个“糟糕的问题”之前,我无法阅读互联网上的所有内容。

答案1

当您将字符串放在单引号中时,shell 不会对该字符串执行变量扩展。你得到了文字字符串。对于 printf 命令,该值$i不是有效的十进制数,因此 printf 会遇到错误。

当您用双引号括起字符串时,shell 将对它执行变量扩展,在您的情况下,返回变量中整数的值i,并且 printf 对此感到满意。

相关内容