Eu gostaria de garantir que, em um determinado ponto de um script, após source
um arquivo de configuração, várias variáveis sejam definidas e, se não estiverem, parem a execução, informando o usuário sobre a variável ausente. eu tentei
for var in $one $two $three ; do
...
mas se, por exemplo, $two
não estiver definido, o loop nunca será executado $two
. A próxima coisa que tentei foi
for var in one two three ; do
if [ -n ${!var} ] ; then
echo "$var is set to ${!var}"
else
echo "$var is not set"
fi
done
Mas se dois não estiverem definidos, ainda recebo "dois está definido como" em vez de "dois não está definido".
Como posso ter certeza de que todas as variáveis necessárias estão definidas?
Atualização / solução: Eu sei que há uma diferença entre "conjunto" e "conjunto, mas vazio". Agora uso (graças a /programming//a/16753536/3456281 e as respostas a esta pergunta) o seguinte:
if [ -n "${!var:-}" ] ; then
portanto, se var
estiver definido, mas vazio, ainda será considerado inválido.
set -u
ao início do seu script para finalizá-lo imediatamente quando uma variável não definida for usada.