파일 이름 와일드카드 패턴을 일치시킬 때 대체 사용

파일 이름 와일드카드 패턴을 일치시킬 때 대체 사용
if [[ $1 == *.(png|jpg) ]]

이것이 내가 시도한 것이지만 작동하지 않습니다. $1뭔가를 할 수 있도록 이 파일 이름 접미사 중 하나와 일치하는지 확인해야 합니다 . 나는 무엇을 해야할지 모르겠습니다. 방금 들어갔습니다 bash. 나는 이 모든 포럼과 다른 포럼을 검색했습니다. 조건문에 적합한 항목을 찾지 못했습니다 if.

답변1

@(this|that)일치 this또는 thatKsh 스타일 확장 글로브도 Bash에서 지원됩니다. Bash에서는 shopt -s extglob. Bash 버전 4.1부터 이러한 기능은 기본적으로 내부적으로 활성화됩니다 [[ ]].

shopt -s extglob # needed in bash-4.0 or older
if [[ $1 == *.@(jpg|png) ]]; then 
    echo match
else
    echo no match
fi

Zsh에서는 *.(jpg|png).

표준 sh에서는 를 사용할 수 있지만 case전체 패턴을 반복해야 합니다.

case $1 in
    *.png|*.jpg) echo match;;
    *)           echo no match;;
esac

바라보다:

관련 정보