2013-11-27 2 views
2

다른 bash 스크립트를 호출하고 두 번째 스크립트에서 문자열 반환 값을 가져 오는 bash 스크립트가 있습니다. 그 문자열을 하드 코드 된 값과 비교하려고합니다. 비록 그것이 옳다고 생각하더라도 if 문을 건너 뛰고 else로 이동합니다.Bash 스크립트의 문자열 비교가 예상대로 작동하지 않습니다.

returnVar=$(/bin/sh ./returnVar.sh ${1}) 

echo variable from second script = $returnVar 

if [ "$returnVar" == "Value-Enabled false" ] ; then 
    variableName="variable1" 
    #do other stuff here 


elif [ "$returnVar" == "Value-Enabled true" ] ; then 
    variableName="variable2" 
    #do other stuff here 

else 
    echo error 
    exit 1 
fi 

이 staement :

이 두 번째 스크립트 = "$ returnVar"

에서 변수를 에코

답을 반환 할 것 같다 여기

는 일부 코드, 단지 변경 변수 이름입니다 "Value-Enabled false"를 원하지만 비교가 작동하지 않습니다. 아무도 내가 잘못 가고있는 것을보고 도울 방법을 알 수 있습니까?

나는 또한 내가 원하는 문자열로 returnVar를 하드 코딩하려고 시도했다. 그래서 내가 모르는 뭔가가 잘못되었습니다. 사전에

감사합니다!

+1

'echo $ X {returnVar} X "에 공백이 포함되어 있는지 확인 하시겠습니까? – halfbit

+0

echo "X $ {returnVar} X"출력을 내십시오 Line1 : X Line2 : 값 사용 가능 falseX 즉 처음에 줄 바꿈 문자가 있음을 의미합니까? 잘못된 형식에 사과드립니다. 제대로 작동하지 못했습니다. ( –

+0

맞다면'echo "X $ {returnVar} X"''returnVar'의 앞과 뒤에 X가 최소 2 개만 반환됩니다 스크립트에서 echo가있는 줄에) 질문 : 'returnVar'에 앞뒤 공백이 있습니까? (X로 둘러싸인 경우 표시됩니다.) – halfbit

답변

2

마침내 얻었습니다!

returnVar=$(/bin/sh ./returnVar.sh ${1}) 

newVar=$(echo "${returnVar}" | tr -d '\n') 

if [ "${newVar}" == "Value-Enabled false" ] ; then 
    variableName="variable1" 
    #do other stuff here 


elif [ "${newVar}" == "Value-Enabled true" ] ; then 
    variableName="variable2" 
    #do other stuff here 

else 
    echo error 
    exit 1 
fi 

이 newVar라는 변수에 새 값을 저장하고, 경우 문에서 newVar 주위에 중괄호를 추가 : 이것은 나를 위해 작동 새로운 코드입니다.

2

나는 비슷한 문제에 직면했다. 문제는 문자열 중 하나가 '\ r'캐리지 리턴으로 끝나고 다른 하나는 그렇지 않다는 것이었다.

비교하기 전에 문자열을 삭제 (특수 문자를 삭제) 할 수 있습니다. 다음

배쉬에서
#!/usr/bin/env python 
import sys 
if len(sys.argv) == 3 and \ 
    len(sys.argv[1]) > 0 and \ 
    len(sys.argv[2]) > 0 and \ 
    sys.argv[1].rstrip('\r') == sys.argv[2].rstrip('\r'): 
    print "same" 
else: 
    print "different\n"- 

당신이 $ str을 문자열에서 '\ r에'를 제거 할 수 있습니다 내가 나를 위해 문자열 비교를 수행하는 간단한 파이썬 스크립트를 쓸 때 난 단지 '\ r에'를 잡을 수 있었다 way :

str_sanitized=$(echo $str | tr -d '\r') 
+0

Thanxx 많이 .. 나는 초보자가 문제를 찾을 수 없었습니다. :) 그것은 나를 위해 일했다 .. –

관련 문제