код для отображения запроса в контексте (в настоящее время unix ksh):

r=$( [ -z "foo" ] && echo true || echo false ) 

Есть ли лучший, более простой способ присвоить r с true или false что-то вроде r=$( [ -z "foo" ]) (который, кажется, дает пустое значение) или r=[ -z "foo" ] что не удалось.

2 ответа2

1

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

[ -z "foo" ]; r=$?

Если вы хотите, чтобы текстовые значения true и false в r (в отличие от 0 и 1), тогда ваше выражение в основном правильно, но следующее немного проще:

[ -z "foo" ] && r=true || r=false
0

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

$ b=false
$ r=$b
$ echo $r
false
$ 

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