Чтобы написать сценарий, который гарантированно будет переносимым между различными оболочками, сценарий должен быть POSIX Shell совместимым. POSIX - это минимальный набор встроенных команд и команд, которые должны поддерживать все соответствующие оболочки. Ash, Dash, Zsh, Bash, Ksh и т. Д. - все это оболочки, способные выполнять сценарии, совместимые с POSIX.
Что делает оболочка типа Bash, так это добавляет приятные функции, которые делают оболочку более способной, например, дополнительные расширения параметров для преобразования в верхний / нижний регистр, замены подстрок и т. Д. И новые встроенные функции, такие как [[ ... ]]
которые предоставляют возможности сопоставления регулярным выражениям и т. д. Хотя это делает Bash более способным, это также означает, что сценарии, написанные с использованием « Bashisms », больше не могут работать под всеми другими оболочками. Ash, Dash и другие минимальные оболочки не знают, как обращаться с функциями, добавленными Bash, Ksh или Zsh, и поэтому терпят неудачу.
Чтобы написать действительно переносимые сценарии, вы должны ограничить содержимое тем, что предоставляется языком команд POSIX.