从我在堆栈上读到的内容,这里有一种语法:
iterator=0
while [ "$iterator" -lt 100 ]
do
printf "$iterator"
iterator=`expr $iterator + 1 `
done
有人关心改进吗?
目标是制作一个在posix系统上最便携的迭代循环。
[编辑] 刚发现这个问题有非常相关的答案: How do I iterate over a range of numbers defined by variables in Bash?但我想在这里给出答案,因为我相信我的问题对于将来的搜索会更准确。
答案 0 :(得分:2)
您可能需要printf
格式的换行符;否则,这些数字都打印在一行上,没有间距。
您应该使用$(…)
代替后面的标记。
即使POSIX shell支持iterator=$(( $iterator + 1 ))
(其中$(( … ))
表示法与$( … )
表示法不同!),因此您无需使用expr
把它们放在一起:
iterator=0
while [ $iterator -lt 100 ]
do
printf '%d\n' $iterator
iterator=$(( $iterator + 1 ))
done
如果您有seq
等命令可用,但还有其他选项,但这不是POSIX的一部分。
有人会在引用时要求将变量括在引号中。这样做没有任何害处,而且在很多通用代码中,我会这样做。但这里的值严格受脚本控制;空格或其他笨拙的角色无法妨碍脚本的正确操作。