![为什么我不能单引号变量?](https://linux22.com/image/209337/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%B8%8D%E8%83%BD%E5%8D%95%E5%BC%95%E5%8F%B7%E5%8F%98%E9%87%8F%EF%BC%9F%20.png)
所以这段代码工作得很好,“$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 对此感到满意。