Não encontrando comandos bash

Não encontrando comandos bash

Fiquei pensando se alguém pode me ajudar:

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 

Eu estava estudando alguns comandos bash quando vi dois comandos: -ze -d. Eu sei o que eles fazem (primeiro verifique a variável em branco e a segunda verifique o diretório de existência). Minha pergunta é como posso encontrar descrições sobre esses comandos (ig man page -d/-z). Eles só podem ser usados ​​com a instrução if-else?

Responder1

Os -de -znão são comandos, mas opções para os utilitários teste [. Esses utilitários estão integrados bashe documentados no bashmanual. Esses utilitários e sinalizadores também são padronizados pelo POSIX, portanto, estão disponíveis em qualquer shell POSIX, não apenas no bash.

Se você estiver em uma bashsessão interativa, poderá obter documentação para as variantes integradas desses utilitários digitando help test( help [também funciona, mas seu texto refere-se apenas à documentação de test).

man teste man [deve funcionar também. Esses manuais descrevemexternoutilitários, provavelmente /bin/teste /bin/[, não aqueles que você usa por padrão no bash.

Então, por exemplo,

! test -z "$dir" && test -d "$dir" && printf '%s is a directory' "$dir"

é exatamente equivalente a

! [ -z "$dir" ] && [ -d "$dir" ] && printf '%s is a directory' "$dir"

ou, se preferir,

if ! test -z "$dir" && test -d "$dir"; then
    printf '%s is a directory' "$dir"
fi

e

if ! [ -z "$dir" ] && [ -d "$dir" ]; then
    printf '%s is a directory' "$dir"
fi

( ! [ -z "$dir" ]provavelmente seria mais comumente escrito [ ! -z "$dir" ]ou [ -n "$dir" ], e só usei o -zteste acima porque foi mencionado na pergunta, o -dteste em uma string vazia falharia de qualquer maneira).

Veja também:

informação relacionada