对于使用变量作为条件的循环,请bash



我正在运行以下bash代码:

num=$(ls -1 $ini/*.ini | wc -l)
echo "Running $num simulations..."
for i in {1..$num};
do
    echo "a"
done

我得到以下输出:

Running 24 simulations...
a

它应该打印24行的" A",但不是。我应该改变什么?谢谢!

卷曲支架不会扩展变量。您可以使用

for i in $(seq $num); do
    echo "a"
done

参见例如man bash

[...]

序列表达式采用表格{x..y[..incr]},其中xy是 整数或单个字符,而递增的可选增量是整数。 提供整数时,表达式将扩展到xy,包含。

[...]

撑杆扩展是在任何其他扩展之前执行的,任何字符 在结果中保留了其他扩展的特殊信息。严格来说是文字。 Bash不将任何句法解释应用于 扩展或牙套之间的文字。

[...]

尝试:

for (( i=0; i < $num; i++ ))
do
    echo "a"
done

支架扩展仅适用于文字,它不扩展变量。

可能的解决方法:

for i in $(seq 1 $num) ; do

阅读:

  • http://mywiki.wooledge.org/bashpitfalls#for_i_in_.24.28ls_.2a.2a.mp3.29
  • http://mywiki.wooledge.org/bashpitfalls#for_i_in_.7b1...24n.7d

无视涉及seq(1)的答案。Cdarke的答案证明了正确的迭代。

还要注意,这是一个特定于BASH的问题。其他具有支撑式扩展的外壳将首先评估参数扩展,但有折衷。

相关内容

  • 没有找到相关文章

最新更新