Обратите внимание на Autotools: придерживайтесь наименьшего общего знаменателя оболочки Bourne и POSIX - возможно, дополненного sed- если вам нужно написать что-то, что должно работать везде . Могут существовать системы, в которых что-то ломается, но вы можете обойти такие проблемы, переписав.
Например, некоторые древние системы имеют проблемы с ошибками расширения в test, иначе [:
if [ $foo = bar ] ; then...
поэтому практика Autoconf заключается в том, чтобы переписать его в двойных кавычках с односимвольным префиксом, например так:
if [ x"$foo" = "xbar" ] ; then...
Вы также можете использовать "x$foo"здесь. Это защищает от возможности того, что это $fooможет быть допустимым параметром test(1), и поскольку [является псевдонимом для test, оно может неправильно интерпретировать выражение. Решение состоит в том, чтобы создать ситуацию, с которой [всегда начинается неизвестный аргумент x, что означает, что он не может иметь особого значения [.
(Autoconf также рекомендует использовать testвместо [, но этот совет возникает как реакция на возможные конфликты с M4 , который также использует [в своем синтаксисе.)
awk - это POSIX , поэтому теоретически он доступен везде. Это даже в Busybox , так что у вас будет awkреализация даже в некоторых очень ограниченных встроенных системах Linux. Тем не менее, я был бы менее удивлен встретить систему без awkчем sed. Я полагаю, все сводится к сложности: более простые инструменты с большей вероятностью выдержат агрессивную сортировку.
Perl не является частью какого-либо широко распространенного стандарта, POSIX или другого, поэтому вы просто не можете рассчитывать на него, если ничего не знаете заранее о целевой среде. Perl не установлен по умолчанию в:
- Cygwin
- FreeBSD и NetBSD
- «минимальная» установка для некоторых Linux, включая Slackware
- многие встроенные Linux, которые полагаются в первую очередь на Busybox для своей пользовательской среды
В руководстве Autoconf есть глава по программированию переносимых оболочек, которая должна быть вам полезна. В последнем разделе охватывает такие инструменты , как sed, awkи многие другие.