我正在运行以下 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
是整数或单个字符,而 incr 是一个可选的增量,是一个整数。当提供整数时,表达式会扩展到 和 之间的每个数字x
,y
包括 和 。[...]
大括号扩展在任何其他扩展之前执行,并且任何其他扩展的特殊字符都保留在结果中。它是严格的文本。Bash 不对扩展的上下文或大括号之间的文本应用任何句法解释。
[...]
尝试:
for (( i=0; i < $num; i++ ))
do
echo "a"
done
读:
忽略涉及的答案seq(1)
。cdarke 的回答展示了正确的迭代。
另请注意,这是特定于 bash 的问题。其他带有大括号扩展的 shell 将首先评估参数扩展,但需要权衡取舍。
大括号扩展仅适用于文字,它不扩展变量。
可能的解决方法:
for i in $(seq 1 $num) ; do