История изменений
Исправление Zmicier, (текущая версия) :
В обычном sh не сохраняются переносы строк, надо $data взять в кавычки.
В ГНУ Баше тоже; а подстановки и zsh раскроются, емнип.
Но это одна ошибка.
Я посчитал за две — она же дважды повторена.
Где ещё две?
Еще одна, что я имел в виду — это зачем-то (echo "Необходима магия" 1>&2 && exit 1)
выполняется в подоболочке, что и само по себе расточительно, но в данном случае еще и exit
выйдет именно из нее, а не из всей программы.
В дословно приведенном примере этого правда тестом не отловить, вызов подоболочки — последнее выражение, а значит программа таки завершится и вернет единицу.
Ну и если очень хочется еще одну странность, то можно отметить, что аварийное завершение зависит от успешного вывода ошибка. Если вывод в файл провалится, но сообщить об этом программа не сможет, то она завершится успешно. Согласитесь, странно? Я правда, навскидку не приведу разумного примера, когда вывод в поток ошибок вернет ошибку, и поэтому это в числе трех не считал.
Исходная версия Zmicier, :
В обычном sh не сохраняются переносы строк, надо $data взять в кавычки.
В ГНУ Баше тоже; а подстановки и zsh раскроются, емнип.
Но это одна ошибка.
Я посчитал за две — она же дважды повторена.
Где ещё две?
Еще одна, что я имел в виду — это зачем-то (echo "Необходима магия" 1>&2 && exit 1)
выполняется в подоболочке, что и само по себе расточительно, но в данном случае еще и exit
выйдет именно из нее, а не из всей программы.
В дословно приведенном примере этого правда тестом не отловить, вызов подоболочки — последнее выражение, а значит программа таки завершится и вернет единицу.
Ну и если очень хочется еще одну странность, то можно отметить, что аварийное завершение зависит от успешного вывода ошибка. Если вывод в файл провалится, но сообщить об этом программа не сможет, то завершится успешно. Согласитесь, странно? Я правда, навскидку не приведу разумного примера, когда вывод в поток ошибок вернет ошибку, поэтому и не считал.