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
) 구문이 다릅니다.