내 질문은 이 코드에서 생성된 반환 값에 관한 것입니다.
if [ -n ]; then echo "true"; else echo "false"; fi
이 인쇄됩니다 true
.
보충 테스트에서도 [ -z ]
인쇄를 사용합니다 true
.
if [ -z ]; then echo "true"; else echo "false"; fi
위 코드에서 [ -n ]
테스트에서는 전달된 문자열 값이 전혀 null이 아니라고 가정하는 이유는 무엇입니까?
아래 코드는 를 인쇄합니다 false
. 이는 전달된 문자열 값이 비어 있고 길이가 0이기 때문에 예상됩니다.
if [ -n "" ]; then echo "true"; else echo "false"; fi
답변1
[ -n ]
테스트를 사용하지 마십시오 -n
.
-n
in은 [ -n ]
전혀 테스트가 아닙니다. [
및 사이에 인수가 하나만 있는 경우 ]
해당 인수는 문자열이며 비어 있는지 테스트됩니다.문자열에 선행이 있더라도 -
여전히 테스트가 아닌 피연산자로 해석됩니다.문자열 -n
은 비어 있지 않으므로 두 개의 문자가 포함되어 있습니다 -
.n
아니요0자 - [ -n ]
true로 평가됩니다.
~처럼이그나시오 바스케스 아브람스 라고, 어디string
매개변수이고 테스트는 다음에서 실행됩니다.string
in은 그에 대해 수행된 테스트와 동일합니다. 언제[ string ]
[ -n string ]
string
공교롭게도 -n
특별한 일은 일어나지 않습니다. in과 두 번째 in은 비어 있는지 테스트하는 문자열입니다 -n
.[ -n ]
-n
[ -n -n ]
[
and 사이에 인수가 하나만 있는 경우 ]
해당 인수는 테스트와 동일한 이름이 지정된 경우에도 항상 비어 있지 않은지 테스트할 문자열입니다. 마찬가지로, 와 그 중 첫 번째 인수 사이에 두 개의 인수가 있는 경우 [
두 번째 인수는 테스트와 동일한 이름이 지정된 경우에도 항상 비어 있지 않은지 테스트할 문자열입니다. 이는 for 구문이 및 또는 그 이후의 단일 인수가 문자열 피연산자라고 주장하기 때문입니다.]
-n
[
[
]
-n
같은 이유로 테스트를 [ -n ]
사용하지 마세요 . 테스트를 사용하지 마세요 .-n
[ -z ]
-z
도움말을 보면 에 대해 [
자세히 알아볼 수 있습니다. bash
이는내장 케이스:
$ type [
[ is a shell builtin
따라서 help [
다음을 실행하여 도움을 받을 수 있습니다.
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
지원되는 테스트와 작동 방식을 포함한 자세한 내용은 의 도움말을 확인해야 합니다 test
. 명령을 실행하면 help test
자세한 목록이 표시됩니다. 다음은 문자열 연산자에 대한 부분입니다. 이를 모두 재현하는 것이 아닙니다.
-z STRING True if string is empty.
-n STRING
STRING True if string is not empty.
STRING1 = STRING2
True if the strings are equal.
STRING1 != STRING2
True if the strings are not equal.
STRING1 < STRING2
True if STRING1 sorts before STRING2 lexicographically.
STRING1 > STRING2
True if STRING1 sorts after STRING2 lexicographically.
-n STRING
동일한 작업 을 수행하십시오 . STRING
문자열이 STRING
비어 있지 않은지 테스트합니다.
답변2
[
엑스]
동등하다[ -n
엑스]
~ 일지라도엑스-
피연산자가 없으면 처음부터 시작합니다.
$ [ -o ] ; echo $?
0
$ [ -eq ] ; echo $?
0
$ [ -n -o ] ; echo $?
0
$ [ -n -eq ] ; echo $?
0
답변3
[ -n ]
[
명령(또는 test
명령)이 다음에 따라 실행되기 때문에 사실입니다.숫자주어진 인수. 인수가 하나만 주어지고 인수가 비어 있지 않은 문자열인 경우 결과는 "true"입니다. "-n"은 비어 있지 않은 2자 문자열이므로 "true"입니다.