у меня есть скрипт, который должен немедленно завершиться, если команда завершается с ненулевым статусом, и я хочу вывести sth в журнал перед выходом:
set -e
command A || (echo "A failed";exit 1)
command B || (echo "B failed";exit 1)
if Condition C;
then
command D || (echo "D failed";exit 1)
он делает то, что я хочу. Если не удалось выполнить команду A/B/D, выведите мне правильное сообщение и выйдите. Я знаю, что () означает подоболочку, и в подоболочке она повторяет что-то, а затем возвращает false в подоболочке (выход 1), поэтому это «ложь || ложь» и, таким образом, выход в основной оболочке. Мой вопрос в том, что это то же самое, что:
#set -e
command A || { echo "A failed";exit 1; }
command B || { echo "B failed";exit 1; }
if Condition C;
then
command D || {echo "D failed";exit 1; }
если нет, то какая разница? В моем тесте они ведут себя одинаково.