如何迭代由Bash中的变量定义的一系列数字?当变量给出范围时,我如何在Bash中迭代一组数字?我知道我可以这样做(在Bash中称为“序列表达式”)。文献资料): for i in {1..5}; do echo $i; done这意味着:1 2 3 4 5然而,如何用变量替换任何一个范围端点?这不管用:END=5for i in {1..$END}; do echo $i; done其中的指纹:{1..5}
4 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
seq
END=5for ((i=1;i<=END;i++)); do echo $idone# ==> outputs 1 2 3 4 5 on separate lines
for ((expr1;expr2;expr3));
for (expr1;expr2;expr3)
((expr))
MM们
TA贡献1886条经验 获得超2个赞
这就是原始表达式不起作用的原因。
从…巴什:
在任何其他展开之前执行大括号展开,并在结果中保留其他展开所特有的任何字符。这是严格意义上的文字。Bash不对扩展上下文或大括号之间的文本应用任何语法解释。
所以,支撑展开是早期作为纯文本宏操作所做的事情,在此之前。参数展开
shell是宏处理器和更正式的编程语言之间高度优化的混合。为了优化典型的用例,语言变得更加复杂,并接受了一些限制。
建议
我建议坚持POSIX1特征。这意味着使用for i in <list>; do
,如果列表已经已知,则使用while
或seq
,见:
#!/bin/shlimit=4i=1; while [ $i -le $limit ]; do echo $i i=$(($i + 1))done# Or -----------------------for i in $(seq 1 $limit); do echo $idone
1.Bash是一个很好的shell,我通过交互方式使用它,但是我不把bash主义放在我的脚本中。脚本可能需要一个更快、更安全、更嵌入风格的shell。
添加回答
举报
0/150
提交
取消