Mille grazie a "Gavin Smith" su stackoverflow.com per la prima parte di questo suggerimento.
Espressioni come ${${a}} non funzionano. Per aggirare il problema, puoi utilizzare eval:
b=value a=b eval aval=\$$a echo $aval
L'output è
value
Grazie per il suggerimento Gavin!
Ok, allora perché dovresti volerlo?
Per me, dovevo verificare che alcune variabili fossero impostate da un file di configurazione incluso. Usando un ciclo e la tecnica di annidamento mostrata sopra possiamo prendere:
Questo:
if [ "${KIDFILE}" == "" ] ; then
echo "ERROR - KIDFILE Not Set"
exit 1
fi
if [ "${KUSER}" == "" ] ; then
echo "ERROR - KUSER Not Set"
exit 1
fi
if [ "${KSERVER}" == "" ] ; then
echo "ERROR - KSERVER Not Set"
exit 1
fi
if [ "${KRFILE}" == "" ] ; then
echo "ERROR - KRFILE Not Set"
exit 1
fi
if [ "${KLFILE}" == "" ] ; then
echo "ERROR - KLFILE Not Set"
exit 1
fi
if [ "${KLINK}" == "" ] ; then
echo "ERROR - KLINK Not Set"
exit 1
fi E sostituiscilo con il più elegante:
NEEDVARS="KIDFILE KUSER KSERVER KRFILE KLFILE KLINK"
for MYVAR in ${NEEDVARS}; do
eval MYVAL=\$${MYVAR}
if [ "${MYVAL}" = "" ] ; then
echo "${MYVAR} NOT SET"
exit 1
fi
done