подсказки оболочки unix для назначения логического значения переменной из теста

501
NeronLeVelu

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

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

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

0

2 ответа на вопрос

1
AFH

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

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

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

[ -z "foo" ] && r=true || r=false 
в основном это то, что я делаю в моем сценарии. Эхо есть, потому что оно присваивает общую переменную на верхнем уровне в оригинальном скрипте. я забыл использовать $? как вход, спасибо за объяснение NeronLeVelu 6 лет назад 0
0
Gilles Quenot

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

$ b=false $ r=$b $ echo $r false $  
ой, извините за то, что я назначил значение, но это результат теста; Я адаптирую запрос. NeronLeVelu 6 лет назад 0

Похожие вопросы