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: