Às vezes eu uso, $PROJECT_HOME/*para excluir todos os arquivos do projeto. Quando a variável de ambiente PROJECT_HOMEnão está definida (como eu fiz sue o novo usuário não tem essa variável de ambiente definida), ela começa a excluir todos os arquivos da pasta raiz. Isso é apocalíptico.
Como posso configurar bashpara gerar erro quando uso uma variável de ambiente indefinida no shell?
[ -z "$VAR" ]trabalha com um não inicializado VARtambém. A inicialização foi apenas para mostrar o comportamento indesejável - o que quero dizer é que, se seus vars forem inicializados em cadeias vazias, de qualquer maneira, e você continuar rm -r "$PROJECT_HOME"/*confiando erroneamente set -u, obterá o comportamento "apocalíptico". IHMO, é melhor prevenir do que remediar quando se trata de proteger todo o conteúdo do seu computador. set -unão é seguro.
PROJECT_HOME=/etc? Apenas verificar se há um valor vazio não é suficiente para impedir o cataclismo. Você não deve usar variáveis de usuários não confiáveis ao executar como root.
set -ufará o que você quiser.