我正在运行以下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'但它没有。我应该改变什么?谢谢!
答案 0 :(得分:1)
花括号不会扩展变量。你可以用
for i in $(seq $num); do
echo "a"
done
参见例如man bash
:
[...]
序列表达式采用
{x..y[..incr]}
形式,其中x
和y
也是 整数或单个字符,incr是可选的增量,是一个整数。 提供整数时,表达式会扩展到x
和之间的每个数字y
,包括在内。[...]
在任何其他扩展和任何字符之前执行大括号扩展 结果中保留了特殊的其他扩展。这是严格的文字。 Bash不对语境使用任何句法解释 扩展或大括号之间的文本。
[...]
答案 1 :(得分:1)
尝试:
for (( i=0; i < $num; i++ ))
do
echo "a"
done
答案 2 :(得分:0)
大括号扩展仅适用于文字,它不会扩展变量。
可能的解决方法:
for i in $(seq 1 $num) ; do
答案 3 :(得分:0)
读:
忽略涉及seq(1)
的答案。 cdarke's answer演示了正确的迭代。
另请注意,这是一个特定于bash的问题。其他具有大括号扩展的shell将首先评估参数扩展,但存在权衡。