bash(またはより一般的にはposixで)でglobに固有の拡張子があることを確認してください。

bash(またはより一般的にはposixで)でglobに固有の拡張子があることを確認してください。

globパターンが次のようになるかどうかを確認する簡単で安定した方法はありますか?ユニークBashの拡張?

a=$(echo -n somedir-*); [ -z "$a" ] ...

これは何かが拡張されたかどうかをテストし、もっと多くはglobの設定によって異なります。

答え1

POSIXly(Bournelyも含む):

set -- somedir-[*] somedir-*
case $#-$1-$2 in
  '2-somedir-[*]-somedir-*') echo 0 match;;
  2-*) echo 1 match;;
  *) echo more than one match;;
esac

これはsomedir-[*] somedir-*次の状況を明確にするためのものです。

  • 一致するものがありません(拡張子はsomedir-[*] somedir-*)。
  • 一致するものがありますがリテラルですsomedir-*somedir-* somedir-*

を使用すると、bash次のことができます。

(shopt -s nullglob
set -- somedir-*
[ "$#" -eq 1 ])

ksh93zshyash同様の機能を持っていますが(機能はで提供されていますzsh)、構文は異なります。

関連情報