Qu’est-ce qui cause la différence d’interprétation de = et == dans un script shell?

J’ai récemment mis à jour vers Ubuntu 13.04 et l’un de mes scripts shell a rompu avec ceci:

#!/bin/sh ... if [ "$SHOW_USAGE" == "true" ]; then ./install.sh: 248: [: false: unexpected operator 

Maintenant, je comprends que je peux résoudre ce problème en remplaçant le double-égal (‘==’) par un seul égal (‘=’). Et existe-t-il un moyen de restaurer l’interprétation plus flexible des versions précédentes?

/bin/sh (et non /bin.sh comme écrit dans votre article) était lié à /bin/bash , mais est maintenant lié à /bin/dash sur Ubuntu. bash tolère certains bassismes même quand on les appelle sh.

Si cela ne vous dérange pas d’exiger bash pour exécuter votre script, vous pouvez utiliser bash [[ au lieu d’essayer d’utiliser [ . Il y a un comportement différent, mais [[ supporte l’opérateur == , alors que [ n’a jamais (sauf peut-être comme extension sur des systèmes particuliers).

Edit: Puisque vous utilisez sh , le == n’a jamais été correct; vous aviez juste de la chance avec une caractéristique particulière de la configuration de votre système.