3

最近、Ubuntu 13.04 に更新したところ、シェル スクリプトの 1 つが次のように壊れました。

#!/bin/sh    
...
if [ "$SHOW_USAGE" == "true" ]; then

./install.sh: 248: [: false: unexpected operator

これで、2 つの等号 ('==') を 1 つの等号 ('=') に置き換えることでこれを修正できることがわかりましたが、13.04 と以前の Ubuntu リリースの間で Ubuntu の動作にこの違いが生じた原因は何ですか? また、以前のリリースが持っていたより柔軟な解釈を復元する方法はありますか?

4

2 に答える 2

3

/bin/sh/bin.sh投稿に書かれているとおりではありません)以前は にリンクされていまし/bin/bashたが、現在は/bin/dashUbuntu にリンクされています。bash は、sh として呼び出された場合でも、いくつかのバシズムを許容します。

于 2013-08-20T17:21:00.643 に答える
1

bashスクリプトを実行する必要があることを気にしない場合は、を使用[[する代わりに bash を使用できます[。いくつかの異なる動作がありますが、演算子を[[サポートしていますが、決してサポートしていません (特定のシステムの拡張機能を除く)。==[

編集: を使用しているshため、==決して正しくありませんでした。システム設定の特定の特性で幸運になっただけです。

于 2013-08-20T17:14:27.817 に答える