在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
)
答案 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