테스트는 연산자 주위에 공백이 있는지 여부에 따라 잘못된 값을 반환하지만 오류는 없습니다.

테스트는 연산자 주위에 공백이 있는지 여부에 따라 잘못된 값을 반환하지만 오류는 없습니다.

연산자 주위에 공백이 있으면 test표현식의 올바른 값이 반환됩니다.

그러나 공백이 없으면 구문 오류가 발생하지 않고 항상 true를 반환합니다.

$ test "A" == "A"; echo $?
0 #<-- OK, 0 stands for true
$ test "A" == "B"; echo $?
1 #<-- OK, 1 stands for false
$ test "A"=="A"; echo $?
0 #<-- OK, 0 stands for true
$ test "A"=="B"; echo $? 
0 #<-- ??? should either return 1 (false), or throw a syntax error (exit code > 1)

답변1

이는 구문에 아무런 문제가 없기 때문입니다. test "A"=="B"와 동일하며 test foo문자열을 테스트하고 문자열이 비어 있지 않으므로 true를 반환합니다. 이에 대해서는 test다음 섹션에서 설명합니다 man bash.

test그리고 [인수 수에 따라 일련의 규칙을 사용하여 조건식을 평가합니다.

  • 매개변수 0개

    표현이 잘못됐네요.

  • 매개변수 1개

    인수가 비어 있지 않은 경우에만 표현식이 true입니다.

매개변수는 공백으로 정의되므로 주변 공백이 없으므로 ==전체 문자열이 "A"=="B"단일 매개변수로 구문 분석됩니다.

작동 중입니다.

$ test foo; echo $?
0
$ test ""; echo $?
1

위에서 볼 수 있듯이 빈 문자열을 전달하면 false가 반환되지만, 비어 있지 않은 문자열을 전달하면 true가 반환됩니다.

관련 정보