回答:
はい、次のコマンドを実行します。
shopt -s nullglob
一致を無効にし、エラーはトリガーされません。
~/.bashrcPOSIXシェルでヌルグロブを検出する場合は、試してください
for i in *.txt; do
[ "$i" = '*.txt' ] && [ ! -e '*.txt' ] && continue
donebreak代わりに、より深刻な結果になる可能性がありますcontinue)。
bashではshopt -s nullglob、一致するものがない場合は、空の配列に展開するために使用できます。
なしのPOSIXシェルでは、ループの最初の部分としてnullglob渡すことで、渡されるファイル名が実際に存在することを確認することにより、この問題を回避できます。[ -e "$file" ] || [ -L "$file" ] || continuefor
[ -eアクセスできないファイル、またはアクセスできないファイルや存在しないファイルへのシンボリックリンクであるファイルに対してfalseを返すため、厳密に同等ではないことに注意してください。
chmod 0 the_file、[ -e the_file ]それは何か他のものでなければならないので、まだ、真と評価します。
mkdir -p x/{a,b} && chmod 444 x && echo x/* && [ -e x/a ]. x / aはアクセスできませんが、xが読み取り可能であるため、x / *は拡張されます。
nullglobオプションのないシェルの通常のテクニックは
set -- [*].type *.type
case $1$2 in
'[*].type*.type') shift 2;;
*) shift
esac
for file do
cmd -- "$file"
done
余分なの[*].typeは*.type、現在のディレクトリで1つのファイルが呼び出される場合をカバーすることです。
これで、ドットファイルを含める場合は、より複雑になります。
数年前にusenetでLaura Fairheadがこの技術を生み出したと信じています。
*.txt。ファイルが存在するかどうかを確認する価値があります。