Mnohokrát děkujeme „Gavinu Smithovi“ na stackoverflow.com za první část tohoto tipu.
Výrazy jako ${${a}} nefungují. Chcete-li to obejít, můžete použít eval:
b=value a=b eval aval=\$$a echo $avalVýstup je
value
Díky za tip Gavine!
Dobře, tak proč byste to chtěli?
Pro mě jsem potřeboval otestovat, že určité proměnné byly nastaveny z přiloženého konfiguračního souboru. Pomocí smyčky a výše uvedené techniky vnoření můžeme vzít:
Toto:
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 A nahraďte ho elegantnějším:
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