
Me preguntaba si alguien podría ayudarme:
if [ -z $1 ]; then
user=$(whoami)
else
if [ ! -d "/home/$1" ]; then
echo "Requested $1 user home directory doesn't exist."
exit 1
fi
user=$1
fi
Estaba estudiando algunos comandos de bash cuando vi dos comandos: -z
y -d
. Sé lo que hacen (primero verificar la variable en blanco y el segundo verificar la existencia del directorio). Mi pregunta es cómo puedo encontrar descripciones sobre estos comandos (ig página de manual -d/-z). ¿Solo se pueden usar con la declaración if-else?
Respuesta1
Los -d
y -z
no son comandos sino opciones de las utilidades test
y [
. Estas utilidades están integradas bash
y documentadas en el bash
manual. Estas utilidades y estos indicadores también están estandarizados por POSIX, por lo que están disponibles en cualquier shell POSIX, no solo en bash
.
Si está en una bash
sesión interactiva, puede obtener documentación para las variantes integradas de estas utilidades escribiendo help test
( help [
también funciona, pero su texto solo hace referencia a la documentación de test
).
man test
y man [
debería funcionar también. Estos manuales describen elexternoutilidades, probablemente /bin/test
y /bin/[
, no las que usas por defecto en bash
.
Así por ejemplo,
! test -z "$dir" && test -d "$dir" && printf '%s is a directory' "$dir"
es exactamente equivalente a
! [ -z "$dir" ] && [ -d "$dir" ] && printf '%s is a directory' "$dir"
o, si quieres,
if ! test -z "$dir" && test -d "$dir"; then
printf '%s is a directory' "$dir"
fi
y
if ! [ -z "$dir" ] && [ -d "$dir" ]; then
printf '%s is a directory' "$dir"
fi
( ! [ -z "$dir" ]
probablemente se escribiría más comúnmente [ ! -z "$dir" ]
o [ -n "$dir" ]
, y solo usé la -z
prueba anterior porque se mencionó en la pregunta, la -d
prueba en una cadena vacía fallaría de todos modos).
Ver también: