실습 자습서 중 하나에서 확인할 명령이있었습니다.
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이 정의되지 않았습니다