bash конечно один из самых странных языков программирования хотя бы потому, что если вы пишете конструкцию if
if something
then
command1
else
command2
fi
то любая программа, которую вы так вызываете, будет возвращать значение, которое определяет удачное было выполнение или неудачное.
Так вот угадайте, что означает "0"
А ноль считается "true", при этом все что не является нулем является "false"
Сделано это так потому, что когда программа выполнилась неудачно, то возвращается код ошибки. А если удачно, то возвращается ноль.