간단히 말해서 공백이 포함된 일부 패턴과 변수를 일치시키는 방법을 찾을 수 없습니다.
이것이 내가 작동할 것으로 기대하는 것입니다("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
$pat
ie 주위에 큰따옴표를 사용하면 "$pat"
정규식 토큰 .
은 +
문자 그대로 처리됩니다.
예:
$ item='foobar baz'; pat=".+bar baz"; if [[ $item =~ $pat ]]; then echo OK; fi
OK