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