Variável não existe se não estiver definida. Por exemplo,
unset var
echo ${var?"this is not set"}
-bash: var: this is not set
O shell exibe uma mensagem de erro se var não estiver definido. O echo não é executado. (Verifique na man page bash as formas de verificar e atribuir valores a uma variável que existe, mas pode ou não ter um valor, ou um que não exista.)
O caso mais comum é geralmente a substituição sem erro, e seria tratado assim:
unset var
echo ${var:-This is a new value}
This is a new value
A variável existe e tem um valor. Por exemplo,
var=123
echo ${var?"this is not set"}
123
A variável existe, mas está vazia ( "" )
var=
echo ${var?"this is not set"}
O eco gera o valor de var , que não é nada, seguido por sua nova linha usual
Atribuir um valor é assim:
var=123
echo $var
123
declare é usado para atribuir atributos a uma variável (verifique a página man bash para typeset ou declare sob **shell builtin commands** para detalhes.