내 bash 테스트 [[ 조건부 디버그 출력에 -n이 나타나는 이유는 무엇입니까?

내 bash 테스트 [[ 조건부 디버그 출력에 -n이 나타나는 이유는 무엇입니까?

조건이 참인지 거짓인지 테스트하고 싶습니다. 다음은 bash 스크립트의 예입니다.

#!/bin/bash
set -x
var=foo
if [[ $var==bar ]]
then
        echo $var is bar
else
        echo $var is not bar
fi
set +x

출력이 될 것으로 예상했지만 foo is not bar다음과 같은 출력을 얻습니다. foo is bar

디버그 출력을 보는 동안 다음을 사용하여 조건이 평가되고 있음을 확인했습니다 -n.

+ var=foo
+ [[ -n foo==bar ]]
+ echo foo is bar
foo is bar
+ set +x

우수한Bash 조건식 매뉴얼 페이지그것은 말한다

-n 문자열

문자열 길이가 0이 아니면 참입니다.

그러나 나는 문자열 길이가 0이 아닌지가 아니라 두 문자열이 서로 같은지 여부에 관심이 있습니다.

답변1

[[의 동작은 $var==bar실제로 두 문자열을 비교하는 조건식이 아니라 단일 문자열(두 개의 등호 문자를 포함하는)이기 때문에 설계된 대로입니다. [[ ... ]]조건식이 아닌 문자열만 포함하기 때문에 기본값은 플래그를 사용하여 -n문자열 길이가 0이 아닌지 확인하고 종료 코드로 평가하는 것입니다 0. 그러나 그것은 당신이 원하는 것이 아니므로 $var가 bar와 같은지 평가하려면 ==연산자 주위에 공백을 사용하여 조건식으로 바꾸십시오.

[[ $var == bar ]]

~에서조건식 매뉴얼 페이지:

문자열1 == 문자열2

문자열1 = 문자열2

문자열이 같으면 참입니다. [[ 명령과 함께 사용하면 위에서 설명한 패턴 매칭이 수행됩니다(조건부 구성 참조).

POSIX 준수를 보장하려면 테스트 명령과 함께 '='를 사용해야 합니다.

관련 정보