Вы можете сказать следующее:
[[ 1 -eq 1 ]] && { [[ 2 -eq 1 ]] ; true ; } || echo hi
если первый тест пройден, вы переходите в блок {...}
и, как только вы запускаете, то, что вы хотели там выполнить, заканчивая true
, вы не продолжаете дальше ||
здесь, защищая свой else
пункт.
Проблема в том, [[ 2 -eq 1 ]]
вернул false и, следовательно, вы попадаете в echo hi
за ||
.
С учетом всего вышесказанного, вы можете увидеть, что это выглядит несколько уродливо и в этом случае (особенно если учитывать несколько условий, которые могут повлиять на оценку вашего конвейера). Что ж, я бы порекомендовал не экономить на нескольких символах новой строки и ради понятного и читабельного кода использовать более длинную форму.