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).