que csh tcsh

que - ¿Cómo puedo verificar si una variable está vacía o no en tcsh Shell?



csh linux (3)

SI tengo que verificar que si una variable está vacía o no, en bash shell puedo verificar con el siguiente script:

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

Pero necesito convertirlo en shell tcsh.


EDITAR: ver comentario a continuación.

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


Puedes probar esto ( encontrado aquí ):

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

Tenga en cuenta que la persona que publicó esto tiene la siguiente firma:

Consejo estándar: evitar la familia csh para scripting.

Nota: Esto se romperá si el nombre es una variable de entorno.

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


Se aplican las advertencias estándar sobre el uso de tcsh / csh , pero aquí está la traducción:

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

Tenga en cuenta, sin embargo, que si tuviera que usar un nombre de variable arbitrario en lugar de $1 en la anterior, la declaración se rompería si esa variable no estuviera definida todavía (mientras que $1 siempre se define , incluso si no está establecida).

Para planificar el caso donde una variable, digamos $var , puede no estar definida , se vuelve complicado:

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

El anidado if se requiere s para evitar romper el script, ya que tcsh aparentemente no tiene cortocircuito (y if se ingresa el condicional de la rama, incluso si se ingresa la rama if ; de manera similar, ambos lados de las expresiones && y || son aparentemente siempre evaluado - esto se aplica al menos con respecto al uso de variables no definidas).