Comparaison de chaînes Null et vide dans Bash [dupliquer]
Cette question a déjà une réponse ici:
Je ne mets aucune valeur pour $pass_tc11; donc il retourne null en écho. Comment le comparer dans la clause if
?
Voici mon code. Je ne veux pas que" salut " soit imprimé...
-bash-3.00$ echo $pass_tc11
-bash-3.00$ if [ "pass_tc11" != "" ]; then
> echo "hi"
> fi
hi
-bash-3.00$
2 réponses
Tout d'abord, notez que vous n'utilisez pas la variable correctement:
if [ "pass_tc11" != "" ]; then
# ^
# missing $
Quoi qu'il en soit, pour vérifier si une variable est vide ou non, vous pouvez utiliser -z
-- > la chaîne est vide:
if [ ! -z "$pass_tc11" ]; then
echo "hi, I am not empty"
fi
Ou -n
-- > La longueur est non nulle:
if [ -n "$pass_tc11" ]; then
echo "hi, I am not empty"
fi
À Partir de man test
:
-chaîne z
La longueur de la chaîne est zéro
-n chaîne
La longueur de la chaîne est non nulle
Échantillons:
$ [ ! -z "$var" ] && echo "yes"
$
$ var=""
$ [ ! -z "$var" ] && echo "yes"
$
$ var="a"
$ [ ! -z "$var" ] && echo "yes"
yes
$ var="a"
$ [ -n "$var" ] && echo "yes"
yes
Fedorqui a une solution de travail mais il y a une autre façon de faire la même chose.
Cale si une variable est définie
#!/bin/bash
amIEmpty='Hello'
# This will be true if the variable has a value
if [ $amIEmpty ]; then
echo 'No, I am not!';
fi
Ou pour vérifier qu'une variable est vide
#!/bin/bash
amIEmpty=''
# This will be true if the variable is empty
if [ ! $amIEmpty ]; then
echo 'Yes I am!';
fi
Tldp.org a une bonne documentation sur si dans bash:
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html