1

在 Kubuntu 15.10 上

echo $BASH_VERSION
4.3.42(1)-release

我试试

reps=1
threads={1}{10..60..10}

for((r=0;r<$reps;r++))
do
    tCount=0
    for t in $threads
    do
        echo "t=$t, tCount=${tCount}"
        #do something funny with it
        ((tCount++))
    done
done

它产生一条线

t={1}{10..60..10}, tCount=0

我怎样才能让它工作?

编辑

我预计

t=1, tCount=0
t=10, tCount=1
t=20, tCount=2
t=30, tCount=3
t=40, tCount=4
t=50, tCount=5
t=60, tCount=6

更新

注意threads=({1}{10..60..10})

进而for t in ${threads[@]}

将在10..60..10范围前加上字符串{1}

(即{1}10,{1}20,..,{1}60

4

1 回答 1

4

{1}表达式只是一个字符串,因为它不符合大括号扩展语法:

序列表达式采用 形式{X..Y[..INCR]},其中 X 和 Y 是整数或单个字符,而 INCR(可选增量)是整数。

大括号扩展是在变量扩展之前执行的,因此您不能仅通过引用变量来扩展大括号:

展开顺序为:大括号展开;波浪号扩展、参数和变量扩展、算术扩展和命令替换(以从左到右的方式完成);分词;和文件名扩展。

是直接写大括号展开,还是使用eval(一般不推荐)。

例子:

tCount=0
for t in {1,{10..60..10}}; do
  echo "t=$t tCount=$tCount"
  (( tCount++ ))
done
于 2016-10-31T08:31:11.510 回答