De "man Bash":
A parameter is set if it has been assigned a value. The null string is a valid value. Once a variable is set, it may be unset only by using the unset builtin command.
Quando você executa testing2=
, está definindo a variável como a string nula.
Altere isso para unset testing2
e tente novamente.
O set -e
não ajuda nesse caso, já que uma atribuição nunca possui um código de saída 1. Tente isso para ver que o último comando executado (a atribuição) tem um código de saída 0 ou levou esta questão :
$ false; a=""; echo $?
0
E eu também acredito que o uso do set -e é mais um problema que uma solução.
O que pode gerar um erro com o uso de variáveis não definidas é set -u
:
#!/bin/bash
set -u
testing="This works"
echo ${testing}
unset testing2
echo ${testing2}
testing3="This should not appear"
echo ${testing3}
A saída será:
$ ./script.sh
This works
./script.sh: line 9: testing2: unbound variable