2012-12-08 10 views
1

나는 간단한 bash 스크립트를 가지고 있습니다. 내 scipt의간단한 문자열 비교가 bash 스크립트에서 작동하지 않습니다.

# Which display is HDMI ? 
for i in `seq 0 $displayLoopCounter` 
do 
    name=$(adb shell cat /sys/devices/platform/omapdss/display$i/name) 

    if [ "$name"=="hdmi" ] ; then 
     echo "$name" 
     hdmiDisplay="display$i" 
    fi 
done 

출력 :

dvi 

hdmi 

내가 bash는 myscript.sh를 사용하여 스크립트를 실행 해요는

display0는

디스플레이 1이 HDMI DVI입니다

+0

나는 이것을 복제 할 수 없다. 정말로'name'의 값이 당신이 생각하는 것이라고 확신 하는가? – carlpett

+0

그래, 나는 확신한다. 심지어 나는 이것을 복제 할 수 없습니다 .. –

+0

사실 내가 adroid 시스템에서 데이터를 읽고 있어요 .. 나는 거기에 실패한 것 같아 –

답변

0

당신의 문제는 당신이 주변에 행에 == 공백이 없습니다. 즉 그것을 하나의 인수 식을 만드는에 대한 bash 맨 상태 :

1 인수 : 인수가 null이 아닌 경우에만 경우 표현은 사실이다.

있습니다 (== 주위에 공백없이) 다음 스크립트를 실행하는 경우 :

#!/bin/bash 
echo Hello >myfile0 
echo fileData >myfile1 
counter=1 
for i in `seq 0 $counter` 
do 
    name=$(cat myfile$i) 
    if [ "$name"=="fileData" ]; then 
     echo $name 
    fi 
done 
rm myfile[01] 

하면 출력이 두 줄, HellofileData을 가지고 것을 볼 수 있습니다.

3 인자 :에 공간을 두는, 당신은 같은 맨 상태 때문에 단지 fileData를 얻을 수 있습니다 두 번째 인수는 조건식에 따라 위의 바이너리 조건 연산자의 경우는 식의 결과입니다 첫 번째와 세 번째 인수를 피연산자로 사용하는 이진 테스트의 결과입니다.

+0

예 .. 사실 내 스크립트가 나를 위해 예상대로 실행 –

+0

하지만 똑같은, 안드로이드 시스템 파일에서 데이터를 읽고 있어요. 거기에서 실패하고있다 –

+0

Ohh .. 내가 "XX $ nameYY"을 울리는다면. 그 출력 YYXXdvi –

2

이것은 문제 : [ "$name"=="hdmi" ] - 조건식은 볼 수있는 인수의 수에 따라 특정 테스트를 수행합니다. 여기서 한 것처럼 하나의 인수 만있는 경우 [은 문자열이 비어 있지 않으면 true를 반환합니다. 여기서는 $ name의 값과 상관없이 "$name"=="hdmi"이 항상 비어 있습니다.

당신은

if [ "$name" == hdmi ]; then ... 

공백 쉘 언어에 매우 중요합니다.

관련 문제