나는 주어진 패턴의 시작과 끝을 나타내기 위해 다음 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