테스트 명령에서 달러 기호 $의 이상한 동작을 설명할 수 있는 사람이 있습니까?
[ "$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
이렇게 하면 문자열이 변수 확장으로부터 보호됩니다.