bash 中从 1 到 n 的字符串的参数化填充

Parametrized population of a string in bash from 1 to n

有没有简单的方法来使用大小参数填充动态字符串?

假设,我们有:

Case N=1:
echo "Benchmark,Time_Run1" > $LOGDIR/$FILENAME

然而,运行 变量是参数化的,我们希望拥有从 1 到 n 的所有 Time_Run

Case N=4:
echo "Benchmark,Time_Run1,Time_Run2,Time_Run3,Time_Run4" > $LOGDIR/$FILENAME

一般的解决方案应该是这种形式:

Case N=n:
echo "Benchmark,Time_Run1,...,Time_Run${n}" > $LOGDIR/$FILENAME

有没有一种方法可以在单个循环中执行此操作而不是使用两个循环,一个循环遍历 n 以生成 运行${n} 另一个循环 n 次以附加“Time_Run" 到列表(类似于 Python)?谢谢!

使用从 1 到 $n 的循环。

{
printf 'Benchmark'
for ((i = 1; i <= $n; i++)); do
    printf ',Time_Run%d' $i
done
printf '\n'
} > $LOGDIR/$FILENAME

用单个循环填充输出字符串的一种方法是:

outstr=Benchmark
for ((i=1; i<=n; i++)); do
    outstr+=",Time_Run$i"
done

不循环也可以做到:

eval "printf -v outstr ',%s' Time_Run{1..$n}"
outstr="Benchmark${outstr}"

但是,eval 是危险的,应该只在没有合理选择的情况下使用。事实并非如此。参见 Why should eval be avoided in Bash, and what should I use instead?