Bash: 달러 기호가 포함된 테스트 문자열

Bash: 달러 기호가 포함된 테스트 문자열

테스트 명령에서 달러 기호 $의 이상한 동작을 설명할 수 있는 사람이 있습니까?

[ "$a" != "$b" ]
echo $?
1
[ "$a" != "b" ]
echo $?
0

test "$a" != "$b" 0이 아닌 1을 반환합니까?

답변1

$변수 또는 특수 매개변수(예: )와 같은 매개변수를 확장하는 데 사용할 수 있는 bash의 특수 문자입니다. $?큰따옴표로 묶인 문자열에서 사용하려면\

$ [ "\$a" != "\$b" ]
$ echo "$?"
0

또는 큰따옴표 대신 작은따옴표(특별히 취급되는 문자가 없는 경우)를 사용하십시오.

$ [ '$a' != '$b' ]
$ echo "$?"
0

답변2

테스트 표현식은 큰따옴표 안에 $a및 를 사용하기 때문에 $b쉘은 이를 변수로 해석하고 해당 값으로 대체합니다.

코드에서 변수 a및가 b설정되지 않았을 가능성이 높습니다. 이는 $a과 가 $b동일한 값(빈 문자열)임을 의미합니다. 따라서 "$a" != "$b"테스트는 false(1)가 됩니다.

비교하고 싶다면 $a$b예를 들어 큰따옴표 대신 작은따옴표를 사용합니다.

if [ '$a' != '$b' ]; then ...; fi

이렇게 하면 문자열이 변수 확장으로부터 보호됩니다.

관련 정보