abc
現在のディレクトリに拡張子またはbak
インファイルがあることを確認したいと思いますtmp
。またはという関数tmpout.wrk
はzshで動作するように(最終的には関数の一部である)得ることはできません。動作しますが、正しく検出されません。
if [[ -f *.(abc|bak|tmp) || -f tmpout.wrk ]]; then
echo 'true';
else
echo 'false';
fi
ベストアンサー1
globが1つ以上のファイルを返すかどうかをテストするには、次のようにします。
if ()(($#)) (*.(abc|bak|tmp)|tmpout.wrk)(NY1); then
echo true
else
echo false
fi
確認されたシンボリックリンクの1つ以上が通常のファイルであることを確認するには、-.
glob修飾子を追加します。
if ()(($#)) (*.(abc|bak|tmp)|tmpout.wrk)(NY1-.); then
echo true
else
echo false
fi
()(($#))
globの結果を渡す匿名関数です。関数の本文((($#))
)は、単に引数の数がゼロでないかどうかをテストします。N
このglobのglob修飾子で開きますnullglob
(globがファイルと一致しない場合は、globを何も拡張しません)。Y1
拡張は最大1つのファイルに制限されます。これはパフォーマンスの最適化です。-
次のglob修飾子を考慮します。後ろにシンボリックリンクの解決。.
通常のファイルのみが考慮されます(したがって、この一般的なファイルまたはシンボリックリンクは最終的にコマンドと同様に通常のファイルとして解決されます[ -f file ]
)。