J'ai deux variables
var=""
var1=abcd
Voici mon code de script shell
if [ $var == $var1 ]; then
do something
else
do something
fi
Si je lance ce code, un message d'avertissement s'affiche
[: ==: unary operator expected
Comment puis-je résoudre ça?
Puisque la valeur de $var
est la chaîne vide, ceci:
if [ $var == $var1 ]; then
étend à ceci:
if [ == abcd ]; then
qui est une erreur de syntaxe.
Vous devez citer les arguments:
if [ "$var" == "$var1" ]; then
Vous pouvez également utiliser =
plutôt que ==
; c'est la syntaxe originale, et elle est un peu plus portable.
Si vous utilisez bash, vous pouvez utiliser la syntaxe [[
, qui ne nécessite pas de guillemets:
if [[ $var = $var1 ]]; then
Même dans ce cas, citer la référence de la variable et ajouter des guillemets ne font pas de mal:
if [[ "$var" = "$var1" ]]; then
pourrait sauver un moment un futur lecteur en essayant de se rappeler si [[
... ]]
le requiert.
Pourquoi tout le monde veut utiliser '==' au lieu de simple '='? C'est une mauvaise habitude! Il est utilisé uniquement dans l'expression [[]]. Et dans (()) aussi. Mais vous pouvez utiliser simplement = aussi! Cela fonctionne bien dans tous les cas. Si vous utilisez des nombres, les chaînes n'utilisent pas la parcellisation, puis comparent comme des chaînes, mais comparent les chiffres comme ça
let -i i=5 # garantee that i is nubmber
test $i -eq 5 && echo "$i is equal 5" || echo "$i not equal 5"
Le match est meilleur et plus rapide. Je suis expert en C/C++, Java, JavaScript. Mais si j'utilise bash, je n'utilise jamais '==' à la place '='. Pourquoi tu le fais?