Вот версия tl; dr: если вы пишете больше, чем страница bash, остановите и перепишите ее на реальном языке программирования . Мне все равно, если это Perl или Python или Ruby. Только не создавайте несмываемые шарики для волос из 500 линий.
Теперь, в дополнение к существующим ответам ...
В Perl есть отладчик.
Многие люди не используют отладчик Perl, но я сильно полагаюсь на него. Это кошмар для меня, чтобы понять, что делает большой сценарий оболочки. Я нахожу этот цикл: «разбрызгивать отладочную информацию по всему коду, запускать, смотреть на результаты отладки, понимать, что мне нужно знать что-то еще, посыпать больше отголосков, повторять», чтобы быть очень медленным и разочаровывающим. Запуск кода в отладчике позволяет вам проверять данные по мере необходимости и проводить больше проверок, чтобы лучше понять, что вам нужно.
Perl является кроссплатформенным.
Скрипт bash не будет работать в Windows без посторонней помощи, но я не совсем об этом говорю. Bash опирается на множество программ командной строки, которые поставляются с системой Unix ... возможно. Предполагая, что они существуют, они не всегда работают одинаково. Такие вещи, как find
и grep
. Это версия GNU? Версия BSD? Может быть, старая Sun / AIX / версия? Поддерживает ли он флаги, которые вы ему бросаете?
Но, эй, вы используете только Fedora, Debian или кого-то еще, кого это волнует? В конце концов, либо ваш дистрибутив изменит что-то несовместимое, либо вы захотите перейти на другую систему, и вдруг вы окажетесь в огромном беспорядке. «Почему этот сервер все еще работает на Redhat 7 ?!» часто потому, что некоторые хрупкие скрипты оболочки делают что-то важное.
Что приводит нас к ...
Perl может объявить свои зависимости.
Если программе Perl требуется определенная версия Perl и определенные модули, она может объявить это машиночитаемым способом с помощью относительно простой меры ее распространения в виде модуля Perl. В Bash такого механизма нет (вы можете создать dpkg или rpm, что является его собственным адом), поэтому вы не знаете, какие предположения сделал ваш bash-скрипт.
Perl легко тестируется.
Я уверен, что есть возможность декомпозировать и протестировать программу bash, и кто-то там пишет прекрасно скомпилированный код оболочки. Это как катание на лыжах в гору или танцующий медведь. Это очень впечатляет, но не очень практично. Так что никто этого не делает. Принимая во внимание, что Perl поставляется с тестовой средой, имеет простые приемы, позволяющие легко тестировать даже однофайловые программы, и рекомендует разбивать большие программы на библиотеки.