【问题标题】:How to pass start variable to for loop, BASH如何将开始变量传递给for循环,BASH
【发布时间】:2014-10-05 01:50:53
【问题描述】:

早安,

我想知道如何正确地将变量传递给for 循环。语法无关紧要,我只想传递变量并计数为 2。

问题:

当我写下时:

r=0 ; for i in {"$r"..10..2}; do echo "Welcome $i times" ;done

我明白了:

Welcome {0..10..2} times

而不是:

Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times

提前感谢任何线索

【问题讨论】:

标签: bash variables for-loop


【解决方案1】:

为了完整起见,

代替

for i in {"$r"..10..2};

你可以试试

for i in $(eval echo {$r..10..2});

但是,我强烈建议您使用此解决方案,但请选择 David 的解决方案。

【讨论】:

  • 非常感谢您的完整回答,祝您有美好的一天! :)
【解决方案2】:

使用变量作为循环边界的for 循环的一般格式是:

#!/bin/bash
a=2
b=10
increment=2

for ((i=$a; i<=$b; i+=$increment)); do
    ## <something with $i>
    echo "i: $i"
done

输出:

$ bash forloop.sh
i: 2
i: 4
i: 6
i: 8
i: 10

【讨论】:

  • 谢谢,...最后一个问题,我如何数到二?
【解决方案3】:

您不能在{a....b} 语法中使用变量。但是你可以使用seq。

见this

【讨论】:

  • mmm... 是的,有可能:s0.cyberciti.org/uploads/cms/2012/10/bash.for_.loop_.pdf 这取决于 bash 版本
  • 看,我的意思是说你不能在大括号内使用变量。甚至那个文件也没有使用它。有关 bash 的最新信息,您应该看到这个gnu bash reference manual
  • @Alejandro Brace expansion is performed before any other expansions, and any characters special to other expansions are preserved in the result. It is strictly textual. Bash does not apply any syntactic interpretation to the context of the expansion or the text between the braces. 也不会真正依赖您的链接作为指导,因为那里有一些相当糟糕的示例,其中的解释很少,例如while true; do ... 是一个比for ((;;)); do ... 更具可读性的无限循环。
  • 我不知道,非常感谢你启发我(:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2017-08-02
  • 2017-04-01
  • 2021-05-31
  • 1970-01-01
  • 2016-01-12
  • 2019-11-29
相关资源
最近更新 更多