web-dev-qa-db-fra.com

Comment puis-je vérifier si une variable est vide ou non dans tcsh Shell?

SI je dois vérifier que si une variable est vide ou non pour cela dans Shell bash, je peux vérifier avec le script suivant:

if [ -z "$1" ] 
then
    echo "variable is empty"
else 
    echo "variable contains $1"
fi

Mais je dois le convertir en tcsh Shell.

23
ramkrishna

Les avertissements standard concernant l’utilisation de tcshcsh s’appliquent, mais voici la traduction:

if ( "$1" == "" ) then      # parentheses not strictly needed in this simple case
    echo "variable is empty"
else 
    echo "variable contains $1"
endif

Notez cependant que si vous utilisiez un nom de variable arbitraire plutôt que $1 dans ce qui précède, l'instruction serait interrompue si cette variable n'était pas encore définie (alors que$1 est toujours défini , même si non défini).


Pour planifier le cas où une variable, telle que $var, peut ne pas être définie , cela devient compliqué:

if (! $?var) then       
  echo "variable is undefined"
else
  if ("$var" == "")  then
      echo "variable is empty"
  else 
      echo "variable contains $var"
  endif
endif

Lesifs imbriqués sont obligatoires pour éviter de rompre le script, car tcsh ne court-circuite apparemment pas (une condition de la branche else if sera évaluée même si la branche if est entrée; de ​​même, les deux côtés des expressions && et || sont apparemment _/toujours évalué - cela s'applique au moins à l'utilisation de variables non définies).

31
mklement0

Vous pouvez essayer ceci ( trouvé ici ):

set name
if ( ${%name} == 0 ) then
        echo " Variable name has 0 characters as value."
endif

Notez que la personne qui a posté ceci a la signature suivante:

Conseil standard: évitez la famille csh pour les scripts. 

Remarque: Ceci s’arrêtera si name est une variable d’environnement.

setenv name foobar ; set name ; echo '+++'$name'+++' ; unset name ; echo '==='$name'==='

++++++
===foobar===
2
Tom Fenech

EDIT: voir le commentaire ci-dessous.

if ( $?1 ) then
    echo "variable is empty"
else 
    echo "variable contains $1"
endif
0
DrGC