정규식의 $ 문자

정규식의 $ 문자

를 사용할 때 $이전 문자가 $문자열 끝에 나타나야 한다는 것을 알고 있습니다.

a그러나 변수가 정수일 때 아래 제공된 테스트 간의 차이점을 모르겠습니다.

  1. [[ a =~ -?[0-9]+ ]]
  2. [[ a =~ ^-?[0-9]+$ ]]

그들은 동일합니까?

답변1

아니요, 표현이 [0-9]+다릅니다 [0-9]+$. 첫 번째는 하나 이상의 숫자와 일치합니다.어느 위치에서나문자열에서 후자는 다음과 같습니다.오직하나 이상의 숫자 시퀀스와 일치끈. 설명을 위해 이 스크립트를 사용하여 첫 번째 인수에 대해 표현식을 테스트하겠습니다.

#!/bin/bash
a=$1

if [[ $a =~ -?[0-9]+ ]]; then
   echo "match to first expression"
else
   echo "no match to first expression"
fi

if [[ $a =~ ^-?[0-9]+$ ]]; then
   echo "match to second expression"
else
   echo "no match to second expression"
fi

결과는 다음과 같습니다.

$ ./test.sh 12345
match to first expression
match to second expression
$ ./test.sh 12345AA
match to first expression
no match to second expression

답변2

아니요. 두 표현은 다릅니다.

[[ a =~ -?[0-9]+ ]]a 에 정수가 포함되어 있는지 테스트합니다. 문자열의 어느 곳에나 있을 수 있지만 중요하지 않습니다.

하지만

반면에 [[ a =~ ^-?[0-9]+$ ]]^는 테스트 문자열의 시작을 나타내고 $는 문자열의 끝을 표시하므로 a가 정수로만 구성되어 있는지(첫 번째 문자로 선택적 - 사용) 테스트됩니다.

이는 두 번째 표현식에서 문자열의 어느 위치에서든 숫자가 아닌 값은 일치하지 않음을 의미합니다.

관련 정보