重击范围为{#..#}的循环


17

{#..#}生成一个数字或字符序列,类似于Python中的range()。如果我echo {1..5}在命令行中执行命令,则有:

1 2 3 4 5

相反,以下bash脚本无法按预期运行。

for i in {1..3};
do
    echo "Iteration $i"
done

将打印:

Iteration {1..3}

为什么?
*我可以使用,seq但我看过了(http://www.cyberciti.biz/faq/bash-for-loop/


如果脚本是通过“ sh”命令执行的,则会发生此错误(尝试使用“ bash”)。

Answers:


22

我尝试了您的代码(将其复制粘贴到终端中),它产生的结果与您发布的结果不同:

for i in {1..3};
do
    echo "Iteration $i"
done
#---OUTPUT BELOW---
Iteration 1
Iteration 2
Iteration 3

我使用bash版本4.2.10(1)-发行版的Linux Mint 12 Lisa(源自Ubuntu)


2
你是对的!我以为sh和bash是同一回事
。–

1
不,bash和sh完全不同... bash比sh更强大,它是在sh的肩膀上制成的:)尽管它们都具有很好的兼容性,但是它们也有区别
zipizap 2013年

请注意,您可以像{{i..j},{l..m}}中的var那样嵌套列表;如果需要不规则序列(例如1 2 3 7 8 9
brown.2179

请注意,在某些发行版中,/bin/shIS实际上是指向bash的,而在Debian和Ubuntu上,通常是指向/bin/dash主要与POSIX兼容的,但不支持与Bash相同的语法。
dragon788 '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.