Bash에서 문자열 비교가 실패함

Bash에서 문자열 비교가 실패함

문자열 배열을 반복하면서 값 중 하나에 대해 몇 가지 다른 작업을 수행하려고 합니다. 모든 요소에 대해 문자열 비교가 실패합니다.

arr[0]='red'
arr[1]='blue'
arr[2]='yellow'
arr[3]='green'

## now loop through the above array
for i in "${arr[@]}"
do
        if [ "$i"="green" ];
        then
                echo "i('$i') is equal to green"
        else
                echo "i('$i') is not equal to green"
        fi

done

나는 또한 시도했다(동일한 결과):

if [ "$i"='green' ];

그리고

if [ $i='green' ];

그리고

if [ $i="green" ];

위의 각 항목에 대한 출력:

i('red') is equal to green
i('blue') is equal to green
i('yellow') is equal to green
i('green') is equal to green

비교에서 내가 뭘 잘못하고 있는 걸까?

답변1

공백이 누락되었습니다.

[ $i="green" ]방법[ -n $i=green ]

당신은해야합니다

[ "$i" = green ]

심지어

[ green = "$i" ]

이는 에도 적용됩니다 i=-n.

다른 쉘로 포팅할 필요가 없다면 bash에서 대괄호를 사용할 수 있습니다.

[[ $i = green ]]

따옴표는 필요하지 않습니다(사실 오른쪽에는 확장을 방지하는 특별한 의미가 있습니다). ==대신 사용할 수도 있습니다 =.

답변2

=비교 연산자 주위에는 공백이 필요합니다.

if [ "$i" = "green" ];

답변3

주변 공백이 필요한 이유 는 및 명령이 전달하는 인수 수에 따라 다른 작업을 수행하기 =때문입니다 . 단일 인수( )만 전달하는 경우 문자열이 비어 있지 않으면 결과는 true입니다.[test[ "$i"=green ]

귀하의 코드와 출력이 일치하지 않습니다. 귀하가 게시한 코드에 따라 각 색상은 다음과 같아야 합니다.i('colour') is equal to green

답변4

[ green = "$i" ]
printf "( '%s' ) is %.$?0sequal to green.\n" "$i" "not "

...그것도 작동합니다.

관련 정보