testまたは[または[[bashシェルと他のシェルの間でより移植性がありますか?

testまたは[または[[bashシェルと他のシェルの間でより移植性がありますか?

私もできることを知っています

$ [ -w /home/durrantm ] && echo "writable"
writable

または

$ test -w /home/durrantm && echo "writable"
writable

または

$ [[ -w /home/durrantm ]] && echo "writable"
writable

私は3番目の構文を使用したいと思います。すべての側面で、すべての否定的なケースと極端なケースで同じですか? UbuntuのbashとOS Xや古い/新しいbashバージョン(4.0以前/以降など)のような移植性に違いはありますか?すべて同じ方法で式を拡張しますか?

ベストアンサー1

はい、違いがあります。最も移植性に優れたのはtestまたはです[ ]。これらはすべてPOSIXtest仕様

構造if ... fiはまたPOSIXで定義そして完全に移植可能でなければなりません。

この[[ ]]機能はksh一部のバージョンbashすべて現代的です)、他のシェルzsh、多分他のシェルにあるかもしれませんが、さまざまな他の単純なシェルにはshありません。dash

したがって、スクリプトを移植可能にするには、またはを使用します[ ]testif ... fi

おすすめ記事