Это, несомненно, подвергнет меня критике за нарушение табу, но лично я предпочитаю использовать тестовые конструкции, а не встроенные циклы if или if для ветвления. Это может обойти такие формы непредсказуемости, как то, что вы испытываете.
if bar; then
echo "yes"
else
echo "no"
fi
Выше приведен основной способ сделать это. Моя последняя, ниже: -
[[ bar ]] && echo "yes"
echo "no"
Эта вторая форма ближе к тому, что вы встретите в сборке с ее «условными скачками», и в результате, на мой взгляд, больше отражает физическую электронику. Сначала выполняется тест, и хотя тогда нет оператора, вторая команда выполняется только в случае неудачи теста.
Некоторые будут критиковать это как опасное; потому что вам нужно быть более осторожным в том, как вы упорядочиваете то, что пишете, а не просто сбрасывать все в ряд очевидных гнезд. Таким образом, я могу составить столько разных условий, сколько захочу, но мне нужно спланировать последовательность, в которой я сам это напишу.