`seq`とbash中括弧拡張が失敗する

`seq`とbash中括弧拡張が失敗する

IINMシステムでエラーが発生した場合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.

この動作の内部を簡単に説明し、タスクを完了するための回避策を提案できますか?

ベストアンサー1

for i in {0..1000000}どちらもfor i in $(seq 1000000)大きなリストを作成してから繰り返します。これは非効率的で、多くのメモリを占有します。

使用:

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

代わりに。またはPOSIXとして:

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

または:

seq 1000000 | xargs...

CRLFでいっぱいのファイルを取得するには:

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

通常、シェルではループをできるだけ避ける必要があります。

おすすめ記事