문자열 비교 전의 추가 문자

문자열 비교 전의 추가 문자

일부 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그것은 잘못된 행동입니다 "".

관련 정보