Bow*_*ark 6 shell bash shell-script crash
这个问题可能是微不足道的,但有了这个简单的for循环
for i in {1..10000000}; do echo "$i" line >> file
done
Run Code Online (Sandbox Code Playgroud)
我的外壳在经过一些精化时间后崩溃了(终端模拟器中的选项卡被自动关闭)并且file没有被创建。
它是GNU bash, version 4.1.11(2)-release。
这是由于内存限制还是其他原因?如果是,这应该是这个限制吗?
随着{1..1000000}它工作正常。
发生这种情况的原因是因为在调用命令之前扩展了括号。因此,您实际上最终会得到如下命令:
for i in 1 2 3 ... 10000000 ; do ...
Run Code Online (Sandbox Code Playgroud)
..因此它会占用大量内存或崩溃。
处理长循环时的解决方案是使用 bash 的 c 样式语法:
for ((i = 1; i <= 10000000; i++))
do
...
done
Run Code Online (Sandbox Code Playgroud)
或者,如果您想与其他 shell 保持兼容,您可以通过管道连接到 while 循环:
seq 1 10000000 | while IFS= read -r line
do
...
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1599 次 |
| 最近记录: |