![테스트는 연산자 주위에 공백이 있는지 여부에 따라 잘못된 값을 반환하지만 오류는 없습니다.](https://linux55.com/image/212630/%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%8A%94%20%EC%97%B0%EC%82%B0%EC%9E%90%20%EC%A3%BC%EC%9C%84%EC%97%90%20%EA%B3%B5%EB%B0%B1%EC%9D%B4%20%EC%9E%88%EB%8A%94%EC%A7%80%20%EC%97%AC%EB%B6%80%EC%97%90%20%EB%94%B0%EB%9D%BC%20%EC%9E%98%EB%AA%BB%EB%90%9C%20%EA%B0%92%EC%9D%84%20%EB%B0%98%ED%99%98%ED%95%98%EC%A7%80%EB%A7%8C%20%EC%98%A4%EB%A5%98%EB%8A%94%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
연산자 주위에 공백이 있으면 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가 반환됩니다.