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 ])

ksh93, zshyash유사한 기능을 가지고 있지만(기능은 에서 제공됨 zsh) 구문이 다릅니다.

관련 정보