2011-11-01 6 views
2

기본 bash 스크립팅 질문이 있습니다. 이 스크립트의 출력은, 내가 것으로 예상 :bash 스크립팅 기본 문자열 비교

Y B X C Y

대신, 내가 얻을 :

X B X C x

#!/bin/bash                  
for foo in 'a' 'b' 'c'; do 
    echo $foo;           
    if [ "$foo"=="b" ]; then                   
     echo x;                 
    else                   
     echo y;                 
    fi                                       
done;  

나는 무엇입니까? ssing?

+2

쳇 ... 그 공백에 쉽게 갈 – Blender

+0

확인을 클릭합니다. 나는 그것을 알아. 운영자간에 공백이 있으면 차이가 있습니다. 아하. –

답변

2

== 연산자 주위에 공백을 추가해야합니다. 그렇지 않으면 첫 번째 반복에 대해 확장 후 단일 토큰 a==b으로 구문 분석됩니다. 이것은 test 내장형 ([이 대체 이름 임)으로 전달됩니다. 단일 인수 a==b이 비어 있지 않은 문자열 아톰이기 때문에 상태 0으로 성공하고 종료하고 then 분기가 실행됩니다.

+0

실제로 성공하고 'then'분기가 실행됩니다. 인수가 1 개인 경우,'test'는 인수가 널이 아니고'a == b'가 널이 아닌 문자열이면 true를 리턴합니다. –

+0

@ 글렌 : 죄송합니다. –

3

이 스크립트를 시도해보십시오

#!/bin/bash 

for foo in 'a' 'b' 'c'; do 
    echo "$foo"; 

    if [ "$foo" = 'b' ]; then 
    echo 'x'; 
    else 
    echo 'y'; 
    fi 
done; 

당신은 bash는 문자열 비교에 대한 =를 사용합니다. 또한 echo 개의 문자열을 인용하십시오.

0

은 다음에서 살펴 보자 :

#!/bin/bash 

for foo in 'a' 'b' 'c'; do 

    echo $foo; 

    if [ $foo == "b" ]; then  # Make a note of the spaces 
     echo "x"; 
    else 
     echo "y"; 
    fi 
done; 

감사합니다,

로한 Dsouza