일부 bash 코드에서는 문자열 비교 전에 추가 문자가 추가된 것을 볼 수 있습니다. 누구든지 이유를 설명할 수 있나요?
if [ "x$VAR" = "xString" ]; then
...
fi
답변1
이는 변수가 설정 해제될 가능성을 방지하기 위한 것임을 알 수 있습니다. 예를 들어 다음을 고려하십시오.
if [ $x = "hi" ]; then echo $x; fi
x
로 설정된 경우 hi
동작은 다음과 같습니다.
$ if [ $x = "hi" ]; then echo $x; fi
hi
$
그러나 x
설정되지 않은 경우 왼쪽에 아무것도 없기 때문에 오류가 발생합니다 =
.
$ if [ $x = "hi" ]; then echo $x; fi
zsh: parse error: condition expected: =
따옴표를 추가하면 문제가 해결됩니다.
$ if [ "$x" = "hi" ]; then echo $x; fi
$
또한 공백이 아닌 값을 추가하면 문제가 해결됩니다.
$ if [ x$x = "xhi" ]; then echo $x; fi
$ x=hi
$ if [ x$x = "xhi" ]; then echo $x; fi
hi
$
답변2
따옴표 없이 본 적이 있을 것입니다.[ x$VAR = xstring ]
어떤 이유로 VAR이 정의되지 않으면 아무 것도 확장되지 않으며 스크립트 해석기는 다음과 같은 오류를 표시합니다 -bash: [: =: unary operator expected
. (즉, 해석기가 이를 보고 [ = string ]
항의할 것입니다.) 추가 문자를 추가하면 다음이 보장됩니다. "nothing"은 "yes"이지만 여전히 유효합니다 =
. 따옴표를 사용하면 이와 같은 오류가 발생하지 않지만 많은 사람들은 습관적으로 문자를 추가하고 따옴표에 많은 관심을 기울이지 않습니다.
답변3
이는 문자열이 $VARIABLE
비어 있더라도 비어 있는 것을 방지하기 위해 수행됩니다. bash
구조
if [ $var = Y ]
그렇다면 $var
그것은 잘못된 행동입니다 ""
.