Пишу сейчас очередной sh-скрипт с кучей вызовов awk, grep и sed. В связи с чем задумался об альтернативах. Попытался сформировать список черт, которые делают sh до сих пор актуальным инструментом:
- Возможность легко и просто скомпилировать под любой утюг.
- Отсутствие развесистой библиотеки, которую интерпретатор таскает с собой, а также как следствие — нет слома совместимости между версиями библиотеки.
- Минимальное время инициализации интерпретатора.
- Малое потребление памяти.
- Простой параллелизм через fork.
- Возможность удобно и просто вызывать внешние команды и пайплайны команд.
- Возможность прозрачно миксовать внешние команды и собственные функции. (В sh мы делаем
command1 | command2
, и это работает одинаково, независимо от того, являются ли эти команды собственными функциями или внешними командами.)
Если обобщить, то главным отличием sh от ЯП типа perl, ruby, python и т.п. является композиция программы как совокупности исполняемых модулей, запускаемых как отдельные процессы, в противовес композиции библиотечных модулей, слинкованных в единый процесс.
Главным минусом sh является то, что в нём не развиты средства работы с какими-либо структурами данных, кроме строк. Да и для самих строк средства не развиты.
То есть потециальная альтернатива sh должна обладать всем перечнем указанных черт, но дополнительно иметь развитые средства работы со структурами данных такими как списки, хэш-массивы и т.д.