[ -n ]-n테스트를 사용하지 않습니다 .
-n에는 [ -n ]전혀 검사하지 않습니다. [와 사이에 하나의 인수 만있는 ]경우 해당 인수는 비어 있는지 확인하기 위해 테스트 된 문자열입니다. 해당 문자열에 Leading -이 있더라도 테스트가 아닌 피연산자로 해석됩니다. 문자열이 때문에 -n비어 있지 - 두 개의 문자를 포함 -하고 n, 하지 제로 characters-- [ -n ]평가하여 true로.
으로 이그나시오 바스케스 - 에이 브람스는 말한다 , 어디 string하나의 인수는 테스트가 수행입니다 string에서 테스트하여 수행과 동일합니다 . 일이 발생 하면 특별한 일이 발생하지 않습니다. 에서 두 번째 에 단순히 문자열은 공허함 테스트가.[ string ][ -n string ]string-n-n[ -n ]-n[ -n -n ]
[and 사이에 하나의 인수 만있는 ]경우 해당 인수는 테스트와 동일하게 이름이 지정 되더라도 항상 비어 있지 않은지 테스트 할 문자열입니다. 마찬가지로,이 둘 개 사이에 인수 때 [와는 ]그 중 첫 번째가 -n, 두 번째는이 시험과 동일한 이름이 될 일이 있더라도, 항상 nonemptiness 테스트 할 문자열입니다. 그 이유는 and 와 after [사이의 단일 인수 가 문자열 피연산자 임을 주장 하기 때문 입니다.[]-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비어 있지 않습니다.
[ -t ]stdout이 터미널인지 (단기[ -t 1 ]) 인지 테스트 중이며 일부 쉘은 여전히 수행하고 있습니다 ( 문자 그대로 의 경우ksh93에만-t) .[ -n "$var" ]보다 사용하는 것이 좋습니다[ "$var" ]. 그것은 여전히 오래된에 실패했지만test값의 구현$var같은=경우에,[ "" != "$var" ]또는[ "x$var" != x ]또는case $x in "")...더 좋을 수 있습니다.