Bashで一致するファイルのないワイルドカード処理

Bashで一致するファイルのないワイルドカード処理

ディレクトリから配列にファイルを読み込もうとしていますが、ファイルが存在しなくても配列に保存されています。ファイル名がなければ除外したいです。

a=(/tmp/nofileexists) && echo ${#a[@]} && echo ${a[@]}
1
/tmp/nofileexists

パスにはワイルドカード文字を含めることができます。

a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}

答え1

ファイル名拡張が失敗した場合は、空のnullglob文字列戻りを使用できます。bash

$ shopt -s nullglob
$ a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}
0
<blank line>

またはfailglobエラー報告を使用してください。

$ shopt -s failglob
$ a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}
bash: no match: /tmp/nofileexists*.pdf

関連情報