배쉬 테스트 :“= ~”는 무엇을합니까? then echo “INT is an

#!/bin/bash
INT=-5

if [[ "$INT" =~ ^-?[0-9]+$ ]]; then

echo "INT is an integer."

else

echo "INT is not an integer." >&2

exit 1

fi

~시작 정규 표현식에서 선행 은 무엇을 합니까?



답변

~실제 운전자의 일부 =~는 우측에 확장 정규식 왼쪽에 그 문자열의 정규식 검색을 수행한다.

[[ "string" =~ pattern ]]

문자열은 따옴표로 묶어야하며 정규 표현식은 따옴표로 묶지 말아야합니다.

Perl 프로그래밍 언어에서도 비슷한 연산자가 사용됩니다.

일반 표현식 bash은 GNU grep-E플래그로 이해 하는 것과 동일 합니다 . 즉 확장 된 정규 표현식입니다.


다소 주제가 맞지 않지만 알아두면 좋은 점 :

캡처 그룹이 포함 된 정규식과 일치하는 경우 각 그룹에서 캡처 한 문자열 부분을 BASH_REMATCH배열 에서 사용할 수 있습니다 . 이 배열의 0 번째 / 첫번째 항목은 대체 명령 &의 대체 패턴 sed(또는 $&Perl)에 해당합니다. 이는 패턴과 일치하는 문자열의 비트이며, 인덱스 1 이상의 항목은 , 등에 해당합니다 \1. \2. A의 sed여분의 패턴 (혹은 $1, $2등 펄), 즉 각각의 괄호 유사한 비트.

예:

string=$( date +%T )

if [[ "$string" =~ ^([0-9][0-9]):([0-9][0-9]):([0-9][0-9])$ ]]; then
  printf 'Got %s, %s and %s\n' \
    "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}"
fi

이것은 출력 할 수 있습니다

Got 09, 19 and 14

현재 시간이 09:19:14 인 경우

배열 이름 의 REMATCH비트는 BASH_REMATCH“Regular Expression Match”, 즉 “RE-Match”에서 나옵니다.


비에 bash본쉘 번 또한 사용할 수있다 expr(기본적인 정규 표현식을 사용하여) 한정 정규 표현 매칭.

작은 예 :

$ string="hello 123 world"
$ expr "$string" : ".*[^0-9]\([0-9][0-9]*\)"
123

답변

[[ expression ]]섹션 아래의 bash 매뉴얼 페이지를 읽어야합니다 .

An additional binary operator, =~, is available, with the same precedence as == and !=. When it is used, the string to the right of the operator is considered an extended regular expression and matched accordingly (as in regex(3)).

긴 이야기는 짧고 and =~처럼 연산자 입니다. 문자열의 실제 정규 표현식과는 아무런 관련이 없습니다.==!=