zshの特定のファイルとファイルタイプの存在の条件付きテスト

zshの特定のファイルとファイルタイプの存在の条件付きテスト

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 ])。

おすすめ記事