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 ])
ksh93
、zsh
はyash
同様の機能を持っていますが(機能はで提供されていますzsh
)、構文は異なります。