このヒントの最初の部分については、stackoverflow.com の「Gavin Smith」に感謝します。
<ブロック引用>${${a}} のような式は機能しません。これを回避するには、eval を使用できます:
b=value a=b eval aval=\$$a echo $aval
出力は
value
Gavin さん、アドバイスありがとうございます!
それで、なぜそうしたいのですか?
私にとっては、含まれている構成ファイルから特定の変数が設定されていることをテストする必要がありました。上記のループとネスト手法を使用すると、次のことができます。
これ:
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 よりエレガントなものに置き換えてください:
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