什么决定了壳支撑膨胀的限制?

什么决定了壳支撑膨胀的限制?

在这个例子中,我指的是整数序列的扩展,但也许(?)限制将与大括号扩展的所有方面相关。这个更普遍的观点也让我感兴趣。

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

我想这个扩展并不是为了这样使用而设计的。崩溃肯定表明存在错误,但很少触发错误。

您认为将数十亿个连续整数输入任何内容有多实用?

相关内容