避免在Bash中使用'seq'命令?

时间:2015-02-03 13:50:34

标签: bash seq

我正在讨论在Bash脚本中使用seq小循环(例如一个包含10次迭代的循环)。 我说,例如,这样做更好

for i in {1..10}
do
   echo "Welcome $i times"
done

而不是使用 seq

for i in $(seq 10)
do
   echo "Welcome $i times"
done

如下所示:http://www.cyberciti.biz/faq/bash-for-loop/

在我看来,短循环使用不是内置命令是没用的。例如,性能呢?

1 个答案:

答案 0 :(得分:5)

当您不知道要执行的范围时,

seq会很方便:您可以说seq $a $b,而您不能说{$a..$b}

此外,{}仅适用于Bash,因此在例如Shell中,您将无法使用它。

话虽如此,如果你的目标是bash,那么使用{1..10}肯定会比使用seq更快(也更便宜),这很重要。 seq是一个外部命令,这使得执行速度变慢。

来自man bash

  

支持扩展

     

Brace扩展在任何其他扩展之前执行,任何   其他扩展特有的字符将保留在结果中。   这是严格的文字。 Bash不应用任何语法   解释扩展的背景或文本之间的文本   括号。

     

...

     

Brace扩展引入了与sh的历史版本的轻微不兼容。 sh不特别对待开口或闭合牙箍   当它们作为单词的一部分出现时,并将它们保存在输出中。   由于大括号扩展,Bash从单词中删除大括号。   例如,输入到sh作为文件{1,2}的单词出现在相同的位置   输出。扩展后,同一个字输出为file1 file2   通过bash。如果需要与sh严格兼容,请启动bash   + B选项或使用+ B选项禁用大括号扩展   命令。