Подсказки оболочки 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

Не тот случай здесь:

$ b=false
$ r=$b
$ echo $r
false
$ 
Другие вопросы по тегам