Terima kasih banyak kepada “Gavin Smith” di stackoverflow.com untuk bagian pertama dari tip ini.
Ekspresi seperti ${${a}} tidak berfungsi. Untuk mengatasinya, Anda dapat menggunakan eval:
b=value a=b eval aval=\$$a echo $avalKeluarannya adalah
value
Terima kasih atas tipnya, Gavin!
Oke, jadi kenapa kamu mau?
Bagi saya, saya perlu menguji bahwa variabel tertentu sedang disetel dari file konfigurasi yang disertakan. Menggunakan loop dan teknik bersarang yang ditunjukkan di atas, kita dapat mengambil:
Ini:
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
Dan ganti dengan yang lebih elegan:
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