如何迭代由Bash中的变量定义的一系列数字?

如何迭代由Bash中的变量定义的一系列数字?

当变量给出范围时,我如何在Bash中迭代一组数字?

我知道我可以这样做(在Bash中称为“序列表达式”)。文献资料):

 for i in {1..5}; do echo $i; done

这意味着:





5

然而,如何用变量替换任何一个范围端点?这不管用:

END=5for i in {1..$END}; do echo $i; done

其中的指纹:

{1..5}


眼眸繁星
浏览 698回答 4
4回答

炎炎设计

for i in $(seq 1 $END); do echo $i; done编辑:我更喜欢seq),因为我实际上还记得它;)

慕婉清6462132

这个seq方法是最简单的,但是Bash有内置的算术计算。END=5for&nbsp;((i=1;i<=END;i++));&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$idone#&nbsp;==>&nbsp;outputs&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;on&nbsp;separate&nbsp;lines这个for ((expr1;expr2;expr3));建造工程就像for (expr1;expr2;expr3)C语言和类似语言,以及其他语言((expr))

MM们

这就是原始表达式不起作用的原因。从…巴什:在任何其他展开之前执行大括号展开,并在结果中保留其他展开所特有的任何字符。这是严格意义上的文字。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 $idone1.Bash是一个很好的shell,我通过交互方式使用它,但是我不把bash主义放在我的脚本中。脚本可能需要一个更快、更安全、更嵌入风格的shell。
打开App,查看更多内容
随时随地看视频慕课网APP