$ cat test.sh #!/bin/sh -ef func() { false echo 'after false' } func || rc=$? func $ sh -efx test.sh + func + false + echo 'after false' after false + func + false $ Что здесь происходит: я написал функцию func() и хочу, чтобы она исполнялась в режиме errexit. Однако при вызове 'func || что-то' функция не выполняется в режиме errexit. Кажется, так ведут себя все шеллы, а не только bash. Чего я интуитивно хочу: чтобы при вызове 'func || что-то' функция func отвалила бы на команде false, т.е. вернула бы статус false, а часть "after false" выполняться не должна. Почему я этого интуитивно хочу? Если бы функция func() была отдельным исполняемым файлом (который выполняется в режиме errexit), поведение было бы именно таким.