我正在运行以下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]}
,其中x
和y
是 整数或单个字符,而递增的可选增量是整数。 提供整数时,表达式将扩展到x
和y
,包含。[...]
撑杆扩展是在任何其他扩展之前执行的,任何字符 在结果中保留了其他扩展的特殊信息。严格来说是文字。 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的问题。其他具有支撑式扩展的外壳将首先评估参数扩展,但有折衷。