拡張されていないアスタリスクによるエラーの防止

拡張されていないアスタリスクによるエラーの防止

Bashでは、以下のようにforループを頻繁に使用します。

for file in *.type; do 
  sommecommand "$file"; 
done;

一致するすべてのファイルに対して操作を実行します*.type。この末尾のファイルが作業ディレクトリにない場合、アスタリスクは拡張されず、通常は一部のコマンドでファイルが見つからないというエラーメッセージが表示されます。私はこの間違いを避けるためのいくつかの方法をすぐに思い出すことができます。しかし、条件を追加することはあまりエレガントに見えません。これを達成するための短くてきれいな方法はありますか?

ベストアンサー1

はい、次のコマンドを実行します。

shopt -s nullglob

一致が無効になり、エラーは発生しません。

  • デフォルトでこの動作が必要な場合は、~/.bashrc
  • POSIX シェルで空のグローブを検出するには、次のようにします。

    for i in *.txt; do
      [ "$i" = '*.txt' ] && [ ! -e '*.txt' ] && continue
    done
    

バラよりhttp://mywiki.wooledge.org/NullGlob

おすすめ記事