- Mac と Ubuntu で /bin/sh の動作が異なるのはなぜですか?
両方とも異なるシェルだからです。ubuntu の sh はダッシュ シェル、minix の sh は ash シェル、slackware の sh は bash シェルです。また、OSX の sh はそれほど長くないため、bash シェルも同様です。
同じ動作が必要な場合は、シェルを指定してください。 .use #!/bin/bash を使用して文字通り bash を意味すると言い、 #!/bin/ksh を使用して文字通り korn-shell を呼び出します。
- クロスプラットフォームの sh スクリプトを作成したい場合、プラットフォームに依存するコードを避けるにはどうすればよいですか?
公式: POSIX 準拠のシェルで実行するために POSIX ルールに厳密を保つ
実用的に: ほぼすべてのシステムで使用可能な 1 つのタイプのシェルに固有のものを作成します (マイクロコントローラーと SoC、または大きな鉄と sparc ステーションは数えません。bash はほとんどのシステムで使用できますが、bash を使用しないシステムがあるため、bash は使用されます)。 100% の移植性を実現するための最良の選択ではありませんが、絶対に最も (ab) 使用されています ;-)
最高の移植性: Ubuntu ユーザーの経験則として: ダッシュ (ubuntu の /bin/sh) で実行する場合、事実上すべてのもの (ルーター、トースター、コーヒーマシンを含む) で実行されます。
とりわけ、user2719058は正しいです。OSX は Linux ではなく BSD-UNIX であるため、同じシェルを実行できますが、コマンドが異なるため、1 つのスクリプトですべてに対応することは非常に困難です。最適なシェルを選択してもそれは変わりません....したがって、すべてのシステムのシステム コマンドが POSIX に準拠していない限り、統一スクリプト言語の価値は非常に限定的であることがここで証明されています。
tl;dr:
統合されたクロスプラットフォーム スクリプティングは夢物語です。システム間のバイナリの違いがこれを妨げているからです。