1

我在 bash 中有以下 for 循环,它在 chrooted 目录中创建循环设备。

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

这对我不起作用,因为在它创建 loop3 之后,它需要 .. 字面意思并尝试创建 loop.. 并失败。但是根据本 教程,它应该可以工作。我通过执行以下操作使其工作:

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

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

4

2 回答 2

3

在 bash 中,您可以编写

for var in {0..7}

你不能说

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

因为大括号扩展发生变量扩展之前。如果您在变量中有范围点,则可以使用 C 风格的 for 循环(如您所做的那样)或seq

for var in $(seq 0 $var)
于 2013-09-27T18:45:23.240 回答
1

我认为您正在阅读本教程。教程确实

for VARIABLE in 1 2 3 4 5 .. N

但从字面上看,这不是正确的 bash 语法——我认为作者只是想说,对于这种 for 循环,您需要明确列出需要迭代的所有值。所以在你的情况下,这将是:

for var in 0 1 2 3 4 5 6 7

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

于 2013-09-27T19:08:43.060 回答