bash의 if 절에서 정규식 사용

bash의 if 절에서 정규식 사용

if 블록을 살펴보십시오.

#!/bin/bash

str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
    echo "matched"
else
    echo "not matched"
    exit 1
fi

exit 0

그러면 "일치"가 인쇄되어야 하지만 그렇지 않습니다. 내가 어디서 잘못됐나요?

답변1

정규식 일치에서 따옴표를 제거해야 합니다.

if [[ ${str} =~ m\.m ]]; then

Bash 매뉴얼 페이지에서:

[...] == 및 !=와 동일한 우선순위로 추가 이항 연산자 =~를 사용할 수 있습니다. 사용되면 연산자 오른쪽에 있는 문자열은 확장 정규식으로 처리되고 그에 따라 일치됩니다(regex(3)에서와 같이). 문자열이 패턴과 일치하면 반환 값은 0이고, 그렇지 않으면 반환 값은 1입니다. 정규식의 구문이 잘못된 경우 조건식의 반환 값은 2입니다. 쉘 옵션 nocasematch가 활성화되면 알파벳 문자의 대소문자에 관계없이 일치가 수행됩니다. 패턴의 일부를 인용하여 강제로 문자열로 일치시킬 수 있습니다.

따라서 인용문의 경우 고대 문자열 일치를 사용하고 있습니다.

패턴에 공백이 필요한 경우 공백을 이스케이프 처리하세요.

str="m   m"
if [[ ${str} =~ m\ +m ]]; then

관련 정보