조건이 참인지 거짓인지 테스트하고 싶습니다. 다음은 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 준수를 보장하려면 테스트 명령과 함께 '='를 사용해야 합니다.