bash에서 if 절 안에 정규 표현식 사용


10

이 경우 블록을보십시오 :

#!/bin/bash

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

exit 0

"일치"로 인쇄되지만 그렇지 않습니다. 내가 어디로 잘못 가고 있니?

답변:


21

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

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

bash 매뉴얼 페이지에서 :

[...] == 및! =와 같은 우선 순위를 가진 추가 이진 연산자 인 = ~를 사용할 수 있습니다. 사용될 때, 연산자 오른쪽의 문자열은 확장 된 정규 표현식으로 간주되며 그에 따라 일치합니다 (regex (3)에서와 같이). 문자열이 패턴과 일치하면 반환 값은 0이고, 그렇지 않으면 1입니다. 정규식이 구문 상 올바르지 않은 경우 조건식의 리턴 값은 2입니다. 쉘 옵션 nocasematch가 사용 가능하면 알파벳 문자의 경우에 관계없이 일치가 수행됩니다. 패턴의 모든 부분은 문자열로 일치되도록 인용 될 수 있습니다.

따라서 따옴표로 오래된 문자열 일치를 사용하고 있습니다.

패턴에 공백이 필요한 경우 이스케이프 처리하십시오.

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

그러나 큰 따옴표가 없으면 정규 표현식 패턴에 공백 문자를 사용할 수 없습니다. 그에 대한 해결책이 있습니까?
Majid Azimi

1
공간은처럼 탈출해야합니다 \ .
ДМИТРИЙ МАЛИКОВ

동적 숫자로 끝나는 문자열을 찾으려면 ${str} =~ "needle"[0-9]{1}사용해야 ${str} =~ needle[0-9]{1}합니까?
mgutt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.