나는 사용한다정규식 친구정규식을 프로토타이핑하고 디버깅합니다. RegEx Buddy를 사용하면 여러 가지 정규식 엔진 유형(.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE 등) 중에서 선택할 수 있습니다.
bash는 어떤 정규식 엔진을 사용합니까(예: in if
및 case
문)? Centos 5.5 32비트 및 bash 3.2.25(1)을 실행 중입니다.
[kevin@mon01 scratch]$ bash --version
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
나는 그것이 GNU BRE가 될 것이라고 생각합니다 아니면 GNU ERE가 될 것입니까?
답변1
bash(및 일반적인 POSIX 쉘)는 명령문에서 정규 표현식을 사용하지 case
않지만글로벌 모드.
연산자를 사용하는 정규 표현식에 대한 지원이 제한됩니다 =~
. 자세한 내용은 다음을 참조하세요.http://mywiki.wooledge.org/BashGuide/Patterns,
이는 bash
확장 정규식(ERE)을 사용함을 의미합니다.
답변2
if
Bash는 및 명령문에서 위의 정규식 유형을 사용하지 않습니다 case
.
대신, 어떤 종류의 정규 표현식보다 덜 강력한 쉘 글로브 모드를 사용합니다. 상대적으로 새로운 버전의 bash에서는 (선) 앵커가 없지만 부정을 포함하는 정규식과 표현적으로 동일하지만 구문이 위의 정규식 유형과 다른 확장된 glob 패턴의 사용을 허용합니다.
shopt -s extglob
그러나 확장 쉘 glob은 먼저 쉘 스크립트에서 또는 대화식으로 사용해야 합니다.
[[ ]]
조건부 명령 내의 특별한 위치에서 =~
이진 관계를 사용하면 오른쪽의 확장 정규식 ERE에 대해 왼쪽의 문자열을 확인할 수 있습니다.
답변3
링크된 Bash 가이드에 따르면 Bash(버전 3.0 이상)는 다음을 사용합니다.확장 정규식(ERE)방언. "
방언에 대한 더 많은 정보를 찾을 수 있습니다여기.