所以这段代码工作得很好,“$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 对此感到满意。