4

В одном из моих лабораторных занятий была команда для проверки.

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

когда я выполняю эту команду, выводится "Имя логина не определено". Справочная страница для теста говорит

> -z STRING
>               the length of STRING is zero

когда я повторяю $ LOGNAME, он печатает мое имя пользователя. Таким образом, есть значение для $ LOGNAME. В первой приведенной выше команде, поскольку правая часть команды выполнена, это означает, что левая часть вернула false. Почему он возвращает false, когда $ LOGNAME имеет значение?

2 ответа2

4

Линия

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

список ИЛИ и может быть переведен как:

DO echo Logname is not defined IF test -z $LOGNAME FAILS

Как вы упомянули в своем вопросе, test -z $LOGNAME проверяет, имеет ли $LOGNAME нулевую длину ... и, поскольку это не так, тест не пройден . Замена || с && следующим образом даст вам поведение, которое вы хотите:

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

РЕДАКТИРОВАТЬ: Согласно комментарию Уильяма Перселла ниже, test -n (тест для строки не нулевой длины) и || может иметь более концептуальный смысл, но в этом случае вам нужно заключить в кавычки $LOGNAME (и на самом деле это хорошая идея, чтобы привыкнуть к кавычкам переменных вообще):

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

Команда test ищет указанный файл в текущей папке. Если вы хотите проверить файл из другого места, укажите полный путь и не используйте опцию -z или опцию -s. Вы можете сделать как ниже:

test /usr /bin /logname && echo $ LOGNAME || логин echo не определен

или же

test -s /usr /bin /logname && echo $ LOGNAME || логин echo не определен

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .