bash - 支撑扩张不扩张?

时间:2016-10-31 08:09:37

标签: bash range brace-expansion

在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

1 个答案:

答案 0 :(得分:3)

{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