다음 스크립트를 고려해보세요.
#! /bin/bash
line="confusing"
if [[ $line =~ [[:lower:]]* ]]
then
echo "matches!"
else
echo "does not match."
fi
위 코드는 예상한 결과를 생성하지만 다음 코드는 그렇지 않습니다.
#! /bin/bash
line="CoNfUsInG"
if [[ $line =~ [[:lower:]]* ]]
then
echo "matches!"
else
echo "does not match."
fi
이것은 "일치!"를 인쇄합니다
. 정규식은 [[:lower:]]*
0개 이상의 소문자를 의미하지 않습니까?
아래에 "matches!"도 인쇄되면 더욱 혼란스러워집니다.
#! /bin/bash
line="CoNfUsInG"
if [[ $line =~ [[:digit:]]* ]]
then
echo "matches!"
else
echo "does not match."
fi
왜 이런 일이 발생하는지 설명할 수 있는 사람이 있나요?
답변1
정규식은 전체 문자열과 일치할 필요가 없습니다. 그렇기 때문에 문자열의 시작과 끝에 각각 및 가 있습니다 ^
.$
[[ CoNfUsInG =~ ^[[:lower:]]*$ ]] || echo no
CoNfUsInGlY, ^[[:lower:]]*
( 없이 $
)는 문자열 시작 부분에 소문자가 없기 때문에 여전히 일치합니다.