Os -d
e -z
não são comandos, mas opções para os utilitários test
e [
. Esses utilitários são criados em bash
e documentados no manual bash
. Esses utilitários e esses flags também são padronizados pelo POSIX, então eles estão disponíveis em qualquer shell POSIX, não apenas bash
.
Se você estiver em uma sessão bash
interativa, poderá obter a documentação das variantes incorporadas desses utilitários digitando help test
( help [
também funciona, mas seu texto apenas se refere à documentação de test
).
man test
e man [
também devem funcionar. Estes manuais descrevem os utilitários externos , provavelmente /bin/test
e /bin/[
, não os que você usa por padrão em bash
.
Então,
! 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 você quiser,
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 eu usei somente o teste -z
acima porque foi mencionado na pergunta, o teste -d
em uma string vazia falharia de qualquer maneira).
Veja também: