No encontrar comandos bash

No encontrar comandos bash

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: -zy -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 -dy -zno son comandos sino opciones de las utilidades testy [. Estas utilidades están integradas bashy documentadas en el bashmanual. 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 bashsesió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 testy man [debería funcionar también. Estos manuales describen elexternoutilidades, probablemente /bin/testy /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 -zprueba anterior porque se mencionó en la pregunta, la -dprueba en una cadena vacía fallaría de todos modos).

Ver también:

información relacionada