Soit le problème suivant (faut exécuter le script pour comprendre) :
#!/bin/bash
if [ -n $string1 ]
then
echo "String \"string1\" is not null."
else
echo "String \"string1\" is null."
fi
if [ -n "$string1" ]
then
echo "String \"string1\" is not null."
else
echo "String \"string1\" is null."
fi
if [ $string1 ]
then
echo "String \"string1\" is not null."
else
echo "String \"string1\" is null."
fi
# ici l'opérateur de test [ ] a un seul arg (le ]) si jamais string1 n'existe pas
# avec "$string1", [ ] a bien 2 arguments, la string vide "" et ]
# et il FAUT toujours quoter avec "", cf exemple suivant :
string1="a = b"
if [ $string1 ]
then
echo "String \"string1\" is not null."
else
echo "String \"string1\" is null."
fi
|
D'où les solutions suivantes :
[ -n "$string" -o "$a" = "$b" ] |
ou
[ "x$string" != x -o "x$a" = "x$b" ] |
Et la seconde est mieux, car avec le x ca ne sera jamais nul (la première solution peut merder sur certains bash il parait )
Sinon l'opérateur de test étendu [[ ]] est pas mal sous bash (on peut utiliser &&, ||, <, > avec, c'est pratique)
---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.