Bash 組み込みコマンドを使用する Bash スクリプトの移植性について疑問に思っています。
UNIX の各フレーバーは、さまざまな UNIX ユーティリティを変更する傾向があることを理解しています。しかし、彼らは Bash と Bash のビルトインを放っておく傾向があるのでしょうか? 特にMacOSはどうですか?
Bash 組み込みコマンドを使用する Bash スクリプトの移植性について疑問に思っています。
UNIX の各フレーバーは、さまざまな UNIX ユーティリティを変更する傾向があることを理解しています。しかし、彼らは Bash と Bash のビルトインを放っておく傾向があるのでしょうか? 特にMacOSはどうですか?
私の知る限り、Mac OS X では bash は変更されておらず (コンパイルに必要な微調整を除けば、http://opensource.apple.com/でソースを確認できます)、スクリプトは移植性が高いはずです。
Graham Lee と Gordon Davisson が指摘しているように、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 を使用していました。そのため、デフォルトでサポートされているものとの間に違いが生じることは間違いありません。
当然のことながら、Mac OS X のさまざまなバージョンの機能セットとビルトインの違いbash
だけでなく、他のツールにも違いがあります。たとえば、Mac OS X には問題があります (Mac OS X のディレクトリ/ファイル パスでよく見られるスペースは、引数ではサポートされていません。新しいバージョンgetopt
のビルトインはこれに役立ちますが、古いバージョン)。当然のことながら、機能や構文が異なる他のツールも存在します。getopts
bash
私は決して専門的なbash
開発者ではありませんが、さまざまなリリースをサポートする Mac OS X 固有のスクリプトを多数作成しています。2.x と 3.x の正規表現の機能と回避策については、Bash の正規表現と代替の記事を参照してください。または、bash
Mac OS X を深く考慮した私のスクリプトのいくつか: tools-osx & bash_stub。
Apple はかなり古いバージョンの Bash を使用しています。GPL3 でライセンスされたコードを出荷していないからです。Apple のオープン ソース サイト から現在のバージョンをダウンロードすると、少なくともバニラ Bash 3.2 であることがわかります (ただし、明らかに Xcode プロジェクトが追加されています)。