0

我正在运行以下 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',但事实并非如此。我应该改变什么?谢谢!

4

4 回答 4

1

大括号不扩展变量。你可以使用

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

参见例如man bash

[...]

序列表达式采用 形式{x..y[..incr]},其中xy 是整数或单个字符,而 incr 是一个可选的增量,是一个整数。当提供整数时,表达式会扩展到 和 之间的每个数字xy包括 和 。

[...]

大括号扩展在任何其他扩展之前执行,并且任何其他扩展的特殊字符都保留在结果中。它是严格的文本。Bash 不对扩展的上下文或大括号之间的文本应用任何句法解释。

[...]

于 2012-10-24T12:06:00.807 回答
1

尝试:

for (( i=0; i < $num; i++ ))
do
    echo "a"
done
于 2012-10-24T12:06:39.150 回答
0

读:

忽略涉及的答案seq(1)cdarke 的回答展示了正确的迭代。

另请注意,这是特定于 bash 的问题。其他带有大括号扩展的 shell 将首先评估参数扩展,但需要权衡取舍。

于 2012-10-24T12:55:25.517 回答
0

大括号扩展仅适用于文字,它不扩展变量。

可能的解决方法:

for i in $(seq 1 $num) ; do
于 2012-10-24T12:04:50.143 回答