Подсказки оболочки unix для назначения логического значения переменной из теста
Код для отображения запроса в контексте (в настоящее время unix ksh):
r=$( [ -z "foo" ] && echo true || echo false )
есть ли лучший, более простой способ назначить r с истинным или ложным что-то вроде r=$( [ -z "foo" ]) (это, кажется, дает пустое значение) или r=[ -z "foo" ] что не удалось.
2 ответа
Решение
[ ... ] построить (или эквивалент test ...) возвращает код завершения 0 для true или 1 для false, но он никогда не генерирует никакого вывода, поэтому $( [ ... ] ) всегда возвращает пустую строку. Возвращенный код завершения находится в $?, так r можно установить на 0 или 1 с помощью:
[ -z "foo" ]; r=$?
Если вы хотите текстовые значения true а также false в r (в отличие от 0 и 1), тогда ваше выражение в основном правильно, но следующее немного проще:
[ -z "foo" ] && r=true || r=false