1068 votes

Comment déterminer si une variable de bash est vide?

Quelle est la meilleure façon de déterminer si une variable en bash est vide ("")?

J'ai entendu dire qu'il est recommandé de faire if [ "x$variable" = "x" ]

Est-ce la bonne méthode? (il doit y avoir quelque chose de plus direct)

1 votes

3 votes

En Bash, [[ -v VAR]] est utilisé pour vérifier si VAR est défini, [[ -z $VAR ]] est utilisé pour vérifier si "$VAR" est étendu à une chaîne vide (""). Ainsi, vous pouvez utiliser [[ -v VAR && -z $VAR ]]. En savoir plus ici (avec une référence officielle)

0 votes

4voto

andrej Points 443

Extension en une ligne de la solution de duffbeer703:

#! /bin/bash
[ -z "$1" ] || some_command_that_needs_$1_parameter

0voto

Raman Kathpalia Points 181

Pour déterminer si une variable "Foo" est vide et ne contient également aucun espace (ou aucun espace blanc comme certaines personnes l'appellent).

 if [[ -n "${Foo/[ ]*\n/}" ]];then

    echo "Foo n'est pas vide et contient des caractères autres que des espaces"

fi

# Une autre façon de résoudre le même problème : enlever les espaces dans Foo & vérifier si Foo est vide

 if [[ -z "${Foo// }" ]];then

     echo "Foo est vide"

 fi

-1voto

rogerdpack Points 565

Pas une réponse exacte, mais j'ai découvert cette astuce. Si la chaîne que vous recherchez provient "d'une commande", vous pouvez en fait stocker la commande dans une variable d'environnement et l'exécuter à chaque fois pour l'instruction if, alors pas besoin de crochets!

Par exemple cette commande, qui détermine si vous êtes sur debian:

grep debian /proc/version

exemple complet:

IS_DEBIAN="grep -i debian /proc/version"

if $IS_DEBIAN; then
  echo 'oui debian'
else
  echo 'non debian'
fi

Donc c'est une façon indirecte (la réexécuter à chaque fois) de vérifier une chaîne vide (en fait, cela vérifie la réponse d'erreur de la commande, mais cela se trouve également à retourner une chaîne vide).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X