`seq` 和 bash 大括号扩展失败

41754

IINM 我的系统在ing时出现故障bash

for i in {0..10000000}; #   Seven zeroes.
do
    false;
done #   `bash` exited and its `tmux` pane/window was closed.

或者

for i in $(seq 0 10000000); #   Seven zeroes.
do
    false;
done #   `bash` exited and its `tmux` pane/window was closed.

但不是什么时候

for i in {0..1000000}; #   Six zeroes.
do
    false;
done #   Finished correctly.

您能否简要解释一下此行为的内部原理并提示完成任务的解决方法?

斯蒂芬·查泽拉斯

for i in {0..1000000}并且for i in $(seq 1000000)都建立了一个大列表,然后循环遍历它。那是低效的并且使用了大量内存。

用:

for ((i = 0; i<= 1000000; i++))

反而。或者POSIXly:

i=0; while [ "$i" -le 1000000 ]; do
  ...
  i=$(($i + 1))
done

或者:

seq 1000000 | xargs...

要获取一个充满 CRLF 的文件:

yes $'\r' | head -n 1000000 >  file

通常,在 shell 中应尽可能避免循环。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章