2017-03-31 135 views
1

我刚刚接触bash脚本。 我试图使用计数器变量在嵌套for循环,像这样:使用变量定义嵌套for循环中的计数器

dir_count=$(find dump_${d}/* -maxdepth 0 -type d | wc -l) 
count_by=11 

for ((i=0;i<=$dir_count;i+=$count_by)) 
do 
    ((start=$i+1)) 
    ((end=$count_by+$i)) 
    echo $start $end 
    for dir in {$start..$end} 
     echo $dir 
    done 
done 

输出是这样的(我得到错误):

1 11 
./loopy.sh: line 23: [: {1..11}: integer expression expected 
12 22 
./loopy.sh: line 23: [: {12..22}: integer expression expected 
23 33 
./loopy.sh: line 23: [: {23..33}: integer expression expected 

1,11,12, 22,23,33对我来说都是整数!可以键入变量吗?我认为这不是。

谢谢!

回答

1

bash括号膨胀会发生很多以前可变膨胀,所以你的代码

for dir in {$start..$end} 

永远不会做什么是应该做的;在bash使用适当的环与C语言风格的for循环作为

for ((dir=start; dir<=end; dir++)); do 
    echo "$dir" 
done 

man bash页面引用,

[..]执行括号扩展任何其它扩展之前,和任何对其他扩展特殊的字符都会保留在结果中。这是严格的文字[..]

+1

哦哇,Bash是奇怪的。好的,这非常有帮助! – JoeM05