Scripting shell: options -z et -n avec if

55

J'ai un script shell dans lequel nous avons les lignes suivantes if [ -z "$xyz" ]et if [ -n "$abc" ], mais je ne suis pas sûr de leur but. Quelqu'un peut-il s'il vous plaît expliquer?

utilisateur3173953
la source

Réponses:

66

Vous pouvez trouver une référence très agréable pour les opérateurs de bash ici . Si vous utilisez un shell différent, recherchez-le <my shell> operatorset vous trouverez tout ce dont vous avez besoin. Dans votre cas particulier, vous utilisez:

-n
   string is not null.

-z
  string is null, that is, has zero length

Pour illustrer:

$ foo="bar";
$ [ -n "$foo" ] && echo "foo is not null"
foo is not null
$ [ -z "$foo" ] && echo "foo is null"
$ foo="";
$ [ -n "$foo" ] && echo "foo is not null"
$ [ -z "$foo" ] && echo "foo is null"
foo is null
terdon
la source
3

man testou man [vous donnera toutes les options pour tester la commande. Dans ce cas, -n teste pour voir si le contenu de $ abc a une longueur non nulle et -z teste pour voir si le contenu de $ xyz est une chaîne de longueur nulle.

doneal24
la source
man [ne fonctionne pas pour moi dans GNU bash, version 4.1.2 (1) - release (x86_64-redhat-linux-gnu). Mais +1 pour le test homme.
Andrew Lorien
1
Note man test(toujours?) Donne la page de manuel de la version du programme externe, qui (pour la version GNU-coreutils au moins) avertit explicitement que certains shells (la plupart des IME) ont une version intégrée qui peut être différente.
dave_thompson_085