test 명령에서 -z 옵션은 무엇입니까 (linux) 명령을 실행할 때 출력은 “Logname is

실습 자습서 중 하나에서 확인할 명령이있었습니다.

test -z $LOGNAME || echo Logname is not defined

이 명령을 실행할 때 출력은 “Logname is not defined”입니다. 테스트 용 맨 페이지

> -z STRING
>               the length of STRING is zero

$ LOGNAME을 반향하면 로그인 이름이 인쇄됩니다. 따라서 $ LOGNAME에 대한 값이 있습니다. 명령의 오른쪽 부분이 실행되었으므로 위의 첫 번째 명령에서 왼쪽 부분이 false를 반환했음을 나타냅니다. $ LOGNAME에 값이있을 때 왜 false를 반환합니까?



답변

라인

test -z $LOGNAME || echo Logname is not defined

이다 OR 목록 및로 번역 할 수 있습니다 :

DO echo Logname is not defined IF가 test -z $LOGNAME 하지 못한

귀하의 질문에서 언급했듯이 길이가 0 test -z $LOGNAME인지 아닌지 $LOGNAME테스트합니다. 그렇지 않으므로 테스트에 실패합니다. 교체 ||&&당신이 원하는 행동을 줄 것이다 다음과 같습니다 :

test -z $LOGNAME && echo Logname is not defined

편집 : 아래의 William Pursell의 의견에 따르면 test -n(길이가 아닌 문자열 테스트) ||더 개념적 의미가 있지만 $LOGNAME이 경우 인용해야합니다 (실제로 인용 습관을 얻는 것이 좋습니다) 일반적으로 변수) :

test -n "$LOGNAME" || echo Logname is not defined


답변

test 명령은 현재 폴더에서 언급 된 파일을 찾습니다. 다른 위치에서 파일을 확인하려면 전체 경로를 제공하고 -z 옵션 또는 -s 옵션을 사용하지 마십시오. 아래와 같이 할 수 있습니다 :

테스트 / usr / bin / logname && echo $ LOGNAME || echo Logname이 정의되지 않았습니다

또는

test -s / usr / bin / logname && echo $ LOGNAME || echo Logname이 정의되지 않았습니다


답변