为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

如何迭代由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 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

for i in $(seq 1 $END); do echo $i; done

编辑:我更喜欢seq),因为我实际上还记得它;)


查看完整回答
反对 回复 2019-06-01
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

这个seq方法是最简单的,但是Bash有内置的算术计算。

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)C语言和类似语言,以及其他语言((expr))


查看完整回答
反对 回复 2019-06-01
?
MM们

TA贡献1886条经验 获得超2个赞

这就是原始表达式不起作用的原因。

从…巴什:

在任何其他展开之前执行大括号展开,并在结果中保留其他展开所特有的任何字符。这是严格意义上的文字。Bash不对扩展上下文或大括号之间的文本应用任何语法解释。

所以,支撑展开是早期作为纯文本宏操作所做的事情,在此之前。参数展开

shell是宏处理器和更正式的编程语言之间高度优化的混合。为了优化典型的用例,语言变得更加复杂,并接受了一些限制。

建议

我建议坚持POSIX1特征。这意味着使用for i in <list>; do,如果列表已经已知,则使用whileseq,见:

#!/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。


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 696 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信