J'essaie d'exécuter le script shell suivant qui est censé vérifier si une chaîne n'est ni espace ni vide. Cependant, j'obtiens le même résultat pour les 3 chaînes mentionnées. J'ai également essayé d'utiliser la syntaxe "[[", mais en vain.
Voici mon code:
str="Hello World"
str2=" "
str3=""
if [ ! -z "$str" -a "$str"!=" " ]; then
echo "Str is not null or space"
fi
if [ ! -z "$str2" -a "$str2"!=" " ]; then
echo "Str2 is not null or space"
fi
if [ ! -z "$str3" -a "$str3"!=" " ]; then
echo "Str3 is not null or space"
fi
J'obtiens la sortie suivante:
# ./checkCond.sh
Str is not null or space
Str2 is not null or space
var=value [command [args]]
est la syntaxe dans laquelle une variable reçoit une valeur. à titre de comparaison,[
(/usr/bin/[
) est la commande et nécessite que var1,! = & var2 soit 3 arguments séparés. var1! = var2 est un seul argument.Pour vérifier la chaîne vide dans le shell
OU
la source
=
. Le==
est un hack non portable inventé par des auteurs de shell pour gâcher l'esprit des jeunes programmeurs.Au cas où vous auriez besoin de vérifier par rapport à n'importe quelle quantité d'espace blanc, pas seulement à un seul espace, vous pouvez le faire:
Pour dépouiller une chaîne d'espace blanc supplémentaire (condense également les espaces blancs au milieu à un espace):
Le
--
garantit que s'il$original
contient des commutateurs compris par echo, ils seront toujours considérés comme des arguments normaux à écho. Il est également important de ne pas mettre""
autour$original
, sinon les espaces ne seront pas supprimés.Après cela, vous pouvez simplement vérifier si
$trimmed
est vide.la source
Un autre test rapide pour qu'une chaîne contienne quelque chose mais de l'espace.
"-n" signifie une chaîne de longueur différente de zéro.
Ensuite, les deux premières barres obliques signifient correspondre à tous les éléments suivants, dans notre ou nos espaces. Ensuite, la troisième barre oblique est suivie de la chaîne de remplacement (vide) et fermée par "}". Notez la différence avec la syntaxe habituelle des expressions régulières.
Vous pouvez en savoir plus sur la manipulation de chaînes dans les scripts bash shell ici .
la source
[[ -n "$1" ]]
le même que[[ ! -z "$1" "]]
?Pour vérifier si une chaîne est vide ou ne contient que des espaces, vous pouvez utiliser:
Voir Extension des paramètres du shell et correspondance de motifs dans le manuel de Bash.
la source
En supprimant toutes les nouvelles lignes et tous les espaces de la chaîne, un vide sera réduit à rien qui puisse être testé et agi
la source