
연산자 주위에 공백이 있으면 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가 반환됩니다.