Bash 정규식 패턴 일치 공백, 이중 괄호 내 테스트, "~=" 연산자 사용

Bash 정규식 패턴 일치 공백, 이중 괄호 내 테스트, "~=" 연산자 사용

간단히 말해서 공백이 포함된 일부 패턴과 변수를 일치시키는 방법을 찾을 수 없습니다.

이것이 내가 작동할 것으로 기대하는 것입니다("ok" 문자열을 에코합니다).

item='foobar baz'
pat=".+bar baz"
if [[ "$item" =~ "$pat" ]] ; then
    echo ok
fi

$pat 주위에 따옴표를 추가/제거해도 아무런 차이가 없는 것 같습니다. 다음 두 가지 오류가 발생합니다.

bash: conditional binary operator expected
bash: syntax error near `~='

누군가 내가 여기서 뭘 잘못하고 있는지 지적하도록 도와줄 수 있나요? 패턴을 즉시 입력해야 합니까(따옴표/큰따옴표 없이, 변수 참조 없이)? 그렇다면 어떻게 공백을 추가할 수 있나요? (대안이 아닌 정규식 일치를 사용하십시오)

감사해요!

답변1

구문 오류는 자명합니다. 즉, ~=대신 을 사용했습니다 =~.

정규식 패턴과 관련하여 셸 내장 함수가 단어 분할을 처리할 수 있으므로 $pat(and )만 사용하세요.$item[[

item='foobar baz'
pat=".+bar baz"
if [[ $item =~ $pat ]]; then
    echo ok
fi

$patie 주위에 큰따옴표를 사용하면 "$pat"정규식 토큰 .+문자 그대로 처리됩니다.

예:

$ item='foobar baz'; pat=".+bar baz"; if [[ $item =~ $pat ]]; then echo OK; fi
OK

관련 정보