조건 정규식 오류


14
string=123456

if [ $string == 123456 ]; then
echo 123
fi

이것은 잘 작동하지만 ==에서 = ~로 변경하면이 오류가 발생합니다.

./test: line 3: [: =~: binary operator expected

=~이 경우 사용 이 잘못되었습니다. =~후두둑 (지정의 왼쪽)을 assinment regex의 오른쪽에 있는 규칙적인 표현과 비교합니다 . 가장 단순한 형태의 정규 표현식이 같이 전달'[0-9][0-9]'
발렌틴 Bajrami

9
@ val0x00ff이지만 123456유효한 RE입니다.
roaima

@roaima는 동의하지만, 정규식은 엔진, 역 참조, 문자 집합, 문자열의 시작, 문자열의 끝 등을 나타내는 메타 문자로 알려져 있습니다.
Valentin Bajrami

답변:


28

Bash 정규식 일치는 이중 대괄호 내에서만 작동합니다[[ ... ]].

string=123456
if [[ "$string" =~ 123456 ]]; then echo 123; fi
123

@ Kusalananda : 편집과 관련하여 [[ ... ]]단어 분리 또는 경로 이름 확장이 발생하지 않으므로 이중 괄호 표현식의 왼쪽에는 따옴표가 필요하지 않습니다 . 단일 괄호 [ ... ](양쪽)와 이중 괄호 표현의 오른쪽을 사용할 때만 필요 합니다.
user000001

@ user000001 정확하지만 필요하지 않은 한 모든 변수를 반사로 인용하는 것이 훨씬 좋습니다. 훨씬 안전한 습관입니다.
Joe

@Joe : 의문의 여지가있을 때, 동의합니다 ... 나는 이미 올바른 답을 편집했기 때문에 이것을 언급했습니다. 내가 그것에 대해 언급하지 않았을 첫 번째 개정판에 있었습니까?
user000001
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.