2013-09-27 30 views
1

我在bash中有以下循环,它在chrooted目录中创建循环设备。在bash for循环中定义范围不起作用

for var in 0 1 2 3 .. 7 
do 
    MAKEDEV -d ${CHROOT}/dev -x loop$var 
done 

这不适合我,因为它创建loop3它需要..从字面上,并尝试创建循环..并失败。但根据这tutorial它应该工作。我得到它通过执行以下操作:

for ((var=0; var<=7; var++)) 
do 
    MAKEDEV -d ${CHROOT}/dev -x loop$var 
done 

我仍然想知道为什么我首先尝试的for循环不起作用。请帮忙。

回答

1

我认为你正在阅读的教程望文生义。该turorial 确实

for VARIABLE in 1 2 3 4 5 .. N 

但是从字面上看,这是不正确的bash语法 - 我觉得作者只是想说,对于这样的for循环,你需要明确地列出你需要的所有值迭代。所以你的情况,这将是:

for var in 0 1 2 3 4 5 6 7 

本教程还提到括号扩展,这@glennjackman在他的回答,这也是完全正确的语法给出。

+0

明白了。所以'..'在bash中的任何地方都不起作用。正确? – Lee

+0

不,''''*可以在[大括号扩展]中工作(https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html) - 请参阅@ glennjackman的回答。 –

3

在bash,你可以写

for var in {0..7} 

你不能说

end=7 
for var in {0..$end} 

因为brace expansion occurs before variable expansion。如果您在变量有你点范围,你可以使用C风格的for循环(像你一样)或seq

for var in $(seq 0 $var) 
+0

但我没有使用范围内的变量。 – Lee

+1

你没有,但有一天你会和你想知道为什么它不起作用。 –