Изменяет ли Darwin/MacOS Bash?

Мне интересно узнать о переносимости скриптов Bash, которые используют встроенные команды Bash.

Я понимаю, что каждый вкус UNIX имеет тенденцию изменять различные утилиты UNIX. Но как правило, они оставляют Bash и Bash встроенные модули самостоятельно? Что относительно MacOS в частности?

Ответ 1

Apple использует довольно старую версию Bash, поскольку они не отправляют код, лицензированный под GPL3. Вы можете загрузить текущую версию с сайта с открытым исходным кодом Apple и посмотреть, что она по крайней мере претендует на ваниль Bash 3.2 (хотя, очевидно, Xcode проект добавлен).

Ответ 2

Насколько я знаю, bash не изменен в Mac OS X (помимо небольших настроек, необходимых для его компиляции, вы можете просмотреть источник на http://opensource.apple.com/), а скрипты должны быть довольно портативными.

Как отмечают Грэхем Ли и Гордон Дэвиссон, Mac OS X поставляется с более старыми версиями, и существуют различия между поддерживаемыми версиями. bash 4 имеет ассоциативные массивы и другие изменения. bash 3 включает регулярное выражение (и, возможно, другие, которые я не искал). Не помню различия bash 2, возможно, некоторые различия в брекетингах/условных тестах?

Mac OS X 10.7.x Lion включает bash 3.2.x. Я не помню точные версии с верхней части головы, но Mac OS X 10.6.x Snow Leopard и 10.5.x Leopard включают bash 3.x. Mac OS X 10.4.x Tiger и ранее использовали bash 2.0.5. Таким образом, вы определенно столкнетесь с различиями между тем, что поддерживается по умолчанию.

Естественно, помимо различий между наборами функций и встроенных модулей для разных версий bash в Mac OS X вы также найдете различия в других инструментах. Например, есть проблемы с getopt в Mac OS X (пробелы, которые часто встречаются в каталогах/файлах Mac OS X, не поддерживаются в аргументах, встроенные версии getopts в новых bash могут помочь с этим, но может быть недоступен в более старых версиях). Естественно, будут и другие инструменты, которые имеют разные функциональные возможности и синтаксисы.

Я определенно не эксперт bash, но я написал несколько скриптов Mac OS X, поддерживающих различные версии. См. Мои Регулярные выражения в статье bash и альтернативы для обсуждения функций регулярного выражения 2.x vs 3.x и обходных решений. Или некоторые из моих сценариев bash, которые в значительной степени восприняли Mac OS X: tools-osx и bash_stub.

Ответ 3

bash версия 4 не отправляется на Дарвин или MacOS Lion. поэтому mac не поддерживает улучшения команды чтения и т.д., что является неудачным.

cygwin имеет bash 4.1.10