패턴 일치에서 ^ 및 $ 제거

패턴 일치에서 ^ 및 $ 제거

나는 주어진 패턴의 시작과 끝을 나타내기 위해 다음 regex condition, 및 를 사용합니다.^$

if [[ "$1" =~ ^[[:digit:]]+$ ]]; then

나는 또한 동등한 것을 썼다glob condition

if [[ "$1" == ^+([[:digit:]])$ ]]; then

및 를 사용하지 않는 사람들이 있는데 ^, $이를 제거하는 이유는 무엇입니까?

답변1

두 번째 표현식은 정수와 일치하지 않습니다. 시도해 보셨나요?

word=123
if [[ "$word" == ^+([[:digit:]])$ ]]; then echo yes; else echo no; fi

산출

no

이는 쉘 글로브의 경우 ==문자열을 일치시키기 위해 전체 패턴이 필요하므로 ^및가 $필요하지 않기 때문입니다. 먼저 리터럴을 사용 ^하고 $값을 둘러싸서 다시 시도해 보겠습니다 .

word='^123$'
if [[ "$word" == ^+([[:digit:]])$ ]]; then echo yes; else echo no; fi

산출

yes

이제 아무데도 언급되지 ^않았습니다 $.

word=123
if [[ "$word" == +([[:digit:]]) ]]; then echo yes; else echo no; fi

산출

yes

확실히 하기 위해 몇 가지 문자열을 확인해 보겠습니다.

for word in 123 a123 123b 12c3
do
    if [[ "$word" == +([[:digit:]]) ]]
    then
        match=yes
    else
        match=no
    fi
    printf "%s:\t%s\n" "$word" "$match"
done

산출

123:    yes
a123:   no
123b:   no
12c3:   no

관련 정보