forループで「引数が長すぎます」エラーが発生しないのはなぜですか?

forループで「引数が長すぎます」エラーが発生しないのはなぜですか?

この場合、「パラメータが多すぎる」エラーが発生することがわかりました。

ls *.*

これは改善されません。

for file in *.*
do
    echo $file
done

なぜ?

ベストアンサー1

「パラメータが長すぎます」というエラーは、E2BIG次のために発生します。execve引数(一部のシステムの環境を含む)の合計サイズが大きすぎる場合のシステム呼び出し。このexecve呼び出しは外部プロセスを開始する呼び出しで、特に別の実行可能ファイルをロードします(別の呼び出しがあります)。fork、コードがまだ同じ実行ファイルから出てくる別のプロセスを実行している場合)。ループforは内部シェル構成なので、呼び出しは含まれません。 globが展開されたときにエラーが発生するのではなく、execveコマンドが呼び出されたときにエラーが発生します。ls *.*ls

execveE2BIGコマンドパラメータの合計サイズが次より大きい場合ARG_MAX 限界。コマンドを使用して、システムでこの制限値を表示できますgetconf ARG_MAX。 (メモリが十分であれば、この制限を超える可能性があります。関連のないエラーが発生しない限り、動作は保証さARG_MAXれます。)execve

おすすめ記事