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