2013-09-10 5 views
0

나는 bash를하고 있는데, 나는 주어진 변수 x에서 부분 문자열 "world"가 있는지 테스트하려고한다. 일부 코드 작업이 있습니다. 그러나 다른 하나는 작동하지 않습니다.bash substring 정규식 일치하는 와일드 카드

우선 하나는 첫번째 방법과 같은 변수를 사용하지 않고 두 번째 작품을 만드는 방법

x=helloworldfirsttime 
if [[ "$x" == "*world*" ]];then 
    echo matching helloworld 

작동하지 않습니다

x=helloworldfirsttime 
world=world 
if [[ "$x" == *$world* ]];then 
    echo matching helloworld 

두 번째 작업하는 이유를 알아낼 할

누군가가 내게 두 번째 수정 수 있습니다 .. 감사합니다

답변

3

그냥 q를 제거하십시오 uotes :이 (이것에 대한 정규식 .*world.*처럼 보일 것이다) 정규식되지 않도록

x=helloworldfirsttime 
if [[ "$x" == *world* ]]; then 
    echo matching helloworld 
fi 

참고. 떠들썩한 파티에서 일치하는 패턴은 여기서 설명되어 떠들썩한 파티의 내장 [[ 오퍼레이터가 패턴으로서 == 시험의 오른쪽 취급하기 때문에 작동
http://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html

2
x=helloworldfirsttime 
$ if [[ "$x" == *world* ]]; then echo MATCHING; fi 
MATCHING 

:

을 때 == 연산자를 사용하면 연산자 오른쪽의 문자열이 패턴으로 사용되어 패턴 일치가 수행됩니다.

0

다음에 공백이 함께 재잘를 제공하려는 경우 당신은 그것을 인용 수 주위 "" 또는 '', 당신은 외부의 패턴 문자 배치에만 있음 :

[[ "$x" == *"hello world"* ]] 

[[ "$x" == *'hello world'* ]] 

[[ "$x" == *"$var_value_has_spaces"* ]] 
관련 문제