有没有一种简单但稳定的方法来验证 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
)但具有不同的语法。