避免Bash中的'seq'命令?

避免Bash中的'seq'命令?,bash,seq,Bash,Seq,我正在讨论在Bash脚本中使用seq for small循环,例如一个10次迭代的循环。 举个例子,我说最好这样做 for i in {1..10} do echo "Welcome $i times" done 而不是使用seq 如文所述: 在我看来,短循环使用而不是内置命令是无用的。例如,性能如何?当您不知道要执行的范围时,seq很方便:您可以说seq$a$b,而不能说{$a..$b} 而且,{}仅适用于Bash,因此在例如Shell中,您将无法使用它 也就是说,如果您的目标是bas

我正在讨论在Bash脚本中使用seq for small循环,例如一个10次迭代的循环。 举个例子,我说最好这样做

for i in {1..10}
do
   echo "Welcome $i times"
done
而不是使用seq

如文所述:

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

当您不知道要执行的范围时,seq很方便:您可以说seq$a$b,而不能说{$a..$b}

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

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

来自man bash:

支架扩张

支架展开在任何其他展开之前执行,并且 结果中保留了其他扩展的特殊字符。 这是严格的文本。Bash不应用任何语法 释义要在语境或文本之间展开 支架

支架扩展引入了与sh历史版本的轻微不兼容。sh不专门处理打开或关闭支架 当它们作为单词的一部分出现时,并在输出中保留它们。 由于大括号扩展,Bash从单词中删除大括号。 例如,作为文件{1,2}输入到sh的单词在 输出。扩展后,将输出与file1 file2相同的字 通过狂欢。如果希望与sh严格兼容,请使用 将+B选项或禁用大括号扩展,并将+B选项设置到集合中 指挥部

当您不知道要执行的范围时,seq很方便:您可以说seq$a$b,而不能说{$a..$b}

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

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

来自man bash:

支架扩张

支架展开在任何其他展开之前执行,并且 结果中保留了其他扩展的特殊字符。 这是严格的文本。Bash不应用任何语法 释义要在语境或文本之间展开 支架

支架扩展引入了与sh历史版本的轻微不兼容。sh不专门处理打开或关闭支架 当它们作为单词的一部分出现时,并在输出中保留它们。 由于大括号扩展,Bash从单词中删除大括号。 例如,作为文件{1,2}输入到sh的单词在 输出。扩展后,将输出与file1 file2相同的字 通过狂欢。如果希望与sh严格兼容,请使用 将+B选项或禁用大括号扩展,并将+B选项设置到集合中 指挥部


也就是说,如果你的目标是bash,那么使用{1..10}肯定会比使用seq更快、更便宜,这很重要;n@Kyrol是的!我不喜欢Bash中的for语法,我发现seq非常容易编写,所以我使用的就是这个。当然{a..b}如果我事先知道a和b:@Kyrol是的,这是真的。所以我使用seq over for的性能很差。最好使用n=$a;n如果说你的目标是bash,那么使用{1..10}肯定会比使用seq更快、更便宜,这可能很重要。你说得对,@EtanReisner,我只是在答案后面附加了你的评论:所以对于n=1做得更好;n@Kyrol是的!我不喜欢Bash中的for语法,我发现seq非常容易编写,所以我使用的就是这个。当然{a..b}如果我事先知道a和b:@Kyrol是的,这是真的。所以我使用seq over for的性能很差。最好使用n=$a;N
for i in $(seq 10)
do
   echo "Welcome $i times"
done