在这个例子中,我指的是整数序列的扩展,但也许(?)限制将与大括号扩展的所有方面相关。这个更普遍的观点也让我感兴趣。
seq
似乎比 {1..n} 大括号扩展处理更长的整数序列(至少,本例中就是这种情况)。
例如 'seq -f @%12.0f 1 1000000000 >/dev/null' .. 这在 14m 04s 内愉快地扩展了 10 亿
然而,echo {1..10000000000} >/dev/null
在“gnome-terminal”和“konsole”中,CLI 崩溃了(...再见终端会话!)
我能从整数序列的大括号扩展中得到的最好值大约是 {1..15000000}.. 只有 1500 万。
这是大括号扩展本身的限制,还是如何echo
处理扩展数据的限制?这似乎是由于用完所有可用 RAM 造成的,但我认为swap
此时它会使用该区域......
另外(顺便说一句),这个 15000000 个整数序列, echo {..}
需要 57.0s;而seq
只需要 12.7 秒...
答案1
echo {1..5}
扩展为命令echo 1 2 3 4 5
,然后以通常的方式扩展。它与 完全不同seq 1 1000000000 >/dev/null
,后者永远不会扩展为具有很多参数的命令。
它更像是echo $(seq 1 1000000000)
:我猜这会以同样的方式中断?
您遇到的问题与处理大命令有关,Unix 一直对此很挑剔,也就是说,这是处理命令字符串的普遍问题。这是编写 Perl 来解决的问题之一。
无论如何,我都会提交一份礼貌且内容丰富的错误报告:它可能会引发有趣的讨论。
答案2
我想这个扩展并不是为了这样使用而设计的。崩溃肯定表明存在错误,但很少触发错误。
您认为将数十亿个连续整数输入任何内容有多实用?