質問: bashシェル:タイプ.pngまたは.pngのすべてのファイルを一覧表示しますか? bashスクリプトで、「。pngまたは.pngタイプのすべてのファイルに対して」と言うにはどうすればよいですか?私はしようとしています :for i in (`ls *.png` && `ls *.png`) しかし、構文エラーが発生します。
回答: 可能なすべての組み合わせが必要な場合は、次を使用します。for i in *.[pp][nn][gg]; do またはshopt -s nocaseglob for i in *.png; do ただし、shopt -u nocaseglobを実行するまで、スクリプトのすべてのシェルグロブ(ワイルドカードファイルの一致)では大文字と小文字が区別されません。本当に.pngと.pngだけが必要な場合(たとえば、.pngや.pngは必要ない場合)、次のいずれかを使用します。shopt -s nullglob for i in *.png *.png; do またはfor i in *.png *.png; do [[ -e "$i" ]] || continue ... nullglobまたは存在チェックの理由は、拡張子が小文字または大文字のみの場合、一致しないパターンがファイルのリストに含まれ、ループの本体でエラーが発生するためです。 nocaseglobと同様に、後でnullglobシェルオプションをオフにすることをお勧めします(私の経験では、nullglobをオンにしておくことは多くの場合、特にスクリプトで有効です)。実際、一致するものがない場合に備えて、このようなすべてのファイルの一致に対してnocaseglobまたは存在チェックのいずれかを使用することをお勧めします。