bash, le tableau de bord et comparaison de chaînes de caractères

Je suis en train de comparer deux chaînes de caractères dans un simple script shell.
J'ai été en utilisant /bin/sh au lieu de /bin/bash, et après d'innombrables heures de débogage, il s'avère sh (qui est en fait tableau de bord) ne peut pas gérer ce bloc de code:

if [ "$var" == "string" ]
then
    do something
fi

Qu'est ce qu'un portable de façon à comparer des chaînes à l'aide de /bin/sh? Je sais que je peux toujours faire le contraire en utilisant !=, mais je me pose des questions sur la propreté, la mobiles.

  • Vous pouvez utiliser [[ $var == "string" ]] , qui est POSIX, mais en option (autant que je sache). Ou vous utilisez [ "$var" = "string" ] . Remarque le "" autour de la variable dans le seul support de l'édition: c'est requise dans le cas $var est vide
  • L'important, c'est les guillemets autour de $var comme litb mentionné. Sans les guillemets, [ $var = "value" ] devient [ = "value" ] qui confond la coquille assez horriblement. Vous verrez probablement une erreur du type "[: =: opérateur unaire attendu" quand vous rencontrez une variable vide sinon.
  • Je comprends que sur le "$var" contre $var, mon problème était d' == vs =
  • [[ ]] est réservée par POSIX, mais pas du tout défini. C'est juste réservé parce que c'est un Korn fonctionnalité que je pense.
InformationsquelleAutor LiraNuna | 2009-07-07