bash 스크립트에서 정규식을 어떻게 사용합니까?


83

정규식을 사용하여 변수에 유효한 연도가 있는지 확인하고 싶습니다. bash 매뉴얼을 읽고 나는 연산자를 사용할 수 있음을 이해합니다 = ~

아래 예를 보면 "not OK"가 표시되지만 "OK"가 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

i="test"
if [ $i=~"200[78]" ]
then
  echo "OK"
else
  echo "not OK"
fi


주위에 공백이 없기 때문에 실패했습니다 =~.
fedorqui 'SO stop harming'2016-06-20

답변:


116

3.1과 3.2 사이에서 변경되었습니다.

이것은 bash-3.1 릴리스 이후 bash-3.2에 추가 된 새로운 기능에 대한 간결한 설명입니다.

문자열 인수를 [[명령의 = ~ 연산자에 인용하면 다른 패턴 일치 연산자와 마찬가지로 문자열 일치가 강제 실행됩니다.

따라서 따옴표없이 사용하십시오.

i="test"
if [[ $i =~ 200[78] ]] ; then
    echo "OK"
else
    echo "not OK"
fi

1
인용 할 수없는 경우 정규식에 공백이 포함 된 상황을 어떻게 처리합니까? 정규식이 예를 들어 a +b구문 오류를보고합니다 ...
Alderath

5
@Alderath : a\ \+b공백과 더하기 문자를 이스케이프하는 데 사용 합니다.
blinry

8

연산자 주위에 공백이 필요합니다 = ~

i = "테스트"
if [[$ i = ~ "200 [78]"]];
그때
  에코 "OK"
그밖에
  에코 "좋지 않음"
fi

3
paxdiablo의 대답은 맞습니다. 여기에 공백을 추가하는 것은 도움이되지 않습니다 (이제 2008 년에는 "not OK"가 표시되며 일치하는 유일한 문자열은 문자 그대로 "200 [78]"입니다).
Marcel Stimberg 2012 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.