シェルでループを避ける必要があるのはなぜですか? [コピー]

シェルでループを避ける必要があるのはなぜですか? [コピー]

次のリンクでは、シェルでループを使用しないことをお勧めします。

forループ範囲内のbash変数

なぜこれですか?以下は、この回答が見つかったときに偶然見たループの例です。

find /etc/postinstall -name '*.sh' | while read script
do
  echo Running $script ...
  $script
  mv $script $script.done
done

答え1

シェルループが最善のアプローチと見なされない2つのアプリケーションタイプを考えることができます。最初はデータ処理です​​。多くのツール(たとえば、、sedなどawkperlは暗黙的にループを実行し、パフォーマンスが向上します。 2つ目は(例コードのように)いくつかのコードがファイルセットに対して実行されている場合です。スイッチをfind使用すると-exec、問題やオーバーヘッドが少ない状態でコマンドを実行できます(シェルでもあります)。より多くのケースがあるかもしれませんが、言及された2つのケースはすでに有益です。つまり、シェルループは本質的に悪くはありません。上記の2つのような他のオプションを検討してください。

答え2

Shellはひどいプログラミング言語ですが、非常に便利です。私は多くのシェルスクリプトを書いて、時にはループを使います。実行に数時間かかるスクリプトがあります。別のものに書き直す必要があります。シェルスクリプトにループがある場合は、完全に管理できなくなる前にスクリプトを再構築することを考えてみましょう。

関連情報