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$
29
demandé sur codeforester 2014-01-28 17:43:41

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
61
répondu fedorqui 2016-09-01 06:10:12

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

2
répondu espr 2014-01-28 16:30:35