我正在讨论在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/
在我看来,短循环使用不是内置命令是没用的。例如,性能呢?
答案 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选项禁用大括号扩展 命令。