Vielen Dank an „Gavin Smith“ auf stackoverflow.com für den ersten Teil dieses Tipps.
Ausdrücke wie ${${a}} funktionieren nicht. Um dies zu umgehen, können Sie eval:
verwendenb=value a=b eval aval=\$$a echo $aval
Ausgabe ist
value
Danke für den Tipp Gavin!
Okay, warum sollten Sie das tun?
Für mich musste ich testen, ob bestimmte Variablen aus einer enthaltenen Konfigurationsdatei festgelegt wurden. Unter Verwendung einer Schleife und der oben gezeigten Verschachtelungstechnik können wir nehmen:
Dies:
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 Und ersetzen Sie es durch das elegantere:
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