【问题标题】:for loops with variable [duplicate]带有变量的for循环[重复]
【发布时间】:2017-05-09 10:26:33
【问题描述】:

以下给了我 5 喜:

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

但是当我对变量执行以下操作时,它不会:

num=5
for i in {1..$num} ; 
echo hihi $i
done

我试着在周围放一些“”或或'',但它仍然没有给我5个嗨,请给我一些建议。结果返回是 {1..$num},所以请告诉我如何为变量设置适当的情况。谢谢。

【问题讨论】:

  • 变量扩展发生在大括号之后,所以你不能在里面使用它们。如果你想使用 vars,你可以使用 seq。即for i in $(seq 1 $num)
  • 不要使用seq;它不如 C 风格的 for 循环,也不比它更标准。

标签: linux bash for-loop


【解决方案1】:

问题是大括号扩展发生在参数扩展之前,所以变量不会像你预期的那样扩展。

使用正确的C 样式for-loop

for ((i=1; i<=num; i++)); do

来自man bash 页面,在EXPANSION 部分下

扩展

在被拆分成单词后在命令行上执行扩展。执行的扩展有七种。

展开顺序为:brace expansiontilde expansionparameter and variable expansionarithmetic expansioncommand substitution(在左侧完成 -正确的时尚); word splitting;和 pathname expansion.

【讨论】:

  • seq 1 $num
  • @heemayl 这需要一个子shell,所以 C for 循环可能是最好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 2014-06-12
  • 1970-01-01
  • 2013-01-25
相关资源
最近更新 更多