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)
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)
Extension en une ligne de la solution de duffbeer703:
#! /bin/bash
[ -z "$1" ] || some_command_that_needs_$1_parameter
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
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).
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.
1 votes
Voir : Test pour une chaîne de caractères de longueur non nulle en Bash sur StackOverflow.
3 votes
En Bash,
[[ -v VAR]]
est utilisé pour vérifier siVAR
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
Connexe : [
[[
vs[
](https://unix.stackexchange.com/a/32211)