bashまたはzshで1つのファイル拡張子または別のファイル拡張子を繰り返します。

bashまたはzshで1つのファイル拡張子または別のファイル拡張子を繰り返します。

これは構文上正しいです。

for f in *bw;do echo $f;done

しかし、そのうちの1つを繰り返すには、どのように拡張機能を追加できますか?

  • 以下は機能しません:
    for f in *bw|*txt;do echo $f;done
    
  • これも機能しません。
    for f in *bw or *txt;do echo $f;done
    

ベストアンサー1

知りません。あなたは再び繰り返す両方「拡張」し(必要な場合)、どちらか一方または両方が存在することを確認します。たとえば、1つだけを印刷する場合(最初の項目)、各ファイルのデフォルト名(拡張子なし)のリストを保持します。連想配列は参照しやすいので便利です。たとえば、Bashでは次のようになります。

declare -A files

for f in *.bw *.txt; do
  bn=${f%.*}
  if [ -z "${files[$bn]}" ] ; then
    echo "$f"
    files["$bn"]=1
  fi
done

おすすめ記事