![bash(또는 더 일반적으로 posix에서)에서 glob에 고유한 확장자가 있는지 확인하세요.](https://linux55.com/image/111030/bash(%EB%98%90%EB%8A%94%20%EB%8D%94%20%EC%9D%BC%EB%B0%98%EC%A0%81%EC%9C%BC%EB%A1%9C%20posix%EC%97%90%EC%84%9C)%EC%97%90%EC%84%9C%20glob%EC%97%90%20%EA%B3%A0%EC%9C%A0%ED%95%9C%20%ED%99%95%EC%9E%A5%EC%9E%90%EA%B0%80%20%EC%9E%88%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EC%84%B8%EC%9A%94..png)
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
) 구문이 다릅니다.