ksh if loop vs [[]] && {cmd1; } || {cmd2; } - PullRequest
0 голосов
/ 26 июня 2018

Я работаю над сценарием оболочки, и следующий синтаксис работает нормально:

if [[ 1 -eq 1 ]] ; then
   [[ 2 -eq 1 ]]
else
   echo hi
fi

Отладочный прогон:

+ [[ 1 -eq 1 ]]
+ [[ 2 -eq 1 ]]

Если я сжимаю утверждение, оно переходит к условию else:

**[[ 1 -eq 1 ]] && { [[ 2 -eq 1 ]] ; } || echo hi**

Отладочный прогон:

+ [[ 1 -eq 1 ]]
+ [[ 2 -eq 1 ]]
+ echo hi
hi

есть идеи, чего не хватает?

Большое спасибо. Сэм

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете сказать следующее:

[[ 1 -eq 1 ]] && { [[ 2 -eq 1 ]] ; true ; } || echo hi

если первый тест пройден, вы переходите в блок {...} и, как только вы запускаете, то, что вы хотели там выполнить, заканчивая true, вы не продолжаете дальше || здесь, защищая свой else пункт.

Проблема в том, [[ 2 -eq 1 ]] вернул false и, следовательно, вы попадаете в echo hi за ||.

С учетом всего вышесказанного, вы можете увидеть, что это выглядит несколько уродливо и в этом случае (особенно если учитывать несколько условий, которые могут повлиять на оценку вашего конвейера). Что ж, я бы порекомендовал не экономить на нескольких символах новой строки и ради понятного и читабельного кода использовать более длинную форму.

...