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