2010-03-16 2 views
0

나는 언젠가는이 문제를 해결할 수 없다. 매뉴얼과 튜토리얼을 읽으면서 혼란스러워졌습니다. 다음 논리를 사용하여 if 문을 원합니다.정규 표현식과 다른 조건 표현식을 bash if 문으로 섞음

if [ -n $drupal_version ] && [[ "$drupal_version" =~ DRUPAL-[6-9]-[1-9][1-9] ]]; then 

그러나 제대로 작동하지 않습니다.

"bash -x ..."스크립트 구문을 사용하여 스크립트를 평가할 때 정상적으로 작동하지만 정규 스크립트로 실행되는 경우 my 표현식이 평가되지 않습니다 (위 조건이 충족되면 else 부분이 실행되지만).

도움을 제공해 주시겠습니까?

+0

Bash의 버전은 무엇입니까? –

답변

0

case/esac, 정규식을 사용할 수 없습니다. 당신이 정규식을 원하는 경우, < 3.2

if [ -n "$drupal_version" ] ;then 
    case "$drupal_version" in 
    DRUPAL-[6-9]-[1-9][1-9]) 
     echo "found" 
     ;; 
    *) 
     echo "version not correct" 
     ;; 
    esac 
fi 

그러나 bash는 사용할 수 없습니다

[[ $drupal_version =~ DRUPAL-[6-9]-[1-9][1-9] ]] && echo "found" 
+0

사례 접근법은 흥미로운 사례입니다. "="의 사용은 내 부분에서 오타입니다. "= ~"을 사용합니다. 대괄호 [[대괄호 [[같은 if 문에서? – Tassos

+0

아니요, 아무런 문제가 없습니다. ']'와']]'을 사용하는 경우에는 몇 가지 차이점이 있습니다. 단일']'을 사용하는 경우 변수를 인용하십시오. http://serverfault.com/questions/52034/what-is-the-difference 사이 - 이중 및 단일 - 사각 괄호 -에서 - bash – ghostdog74

0

= 귀하의 답변에 대한 여러분 모두 감사는 =~의주의. 이중 괄호]]는 bash에 고유 한 구조체이며 스크립트는 #!/bin/sh 대신 #!/bin/bash를 가리키는 첫 줄을 필요로합니다. 그 라인을 변경하고 모든 것이 작동합니다.