Variabel Variabels dengan Bash / Shell Script


Istilah Variabel variabels pertama kali saya dengar di PHP(saya pernah bikin tutorial tentang ini disini), arti kalimat ini kurang lebih seperti ini, nilai sebuah variabel, dimana nilai tersebut juga merupakan sebuah variabel. Bingung ya, sama berarti saya juga bingung, tapi memang seperti itulah adanya, saya sendiri juga kebingungan ketika pertama kali memahaminya, namun dengan praktek hal ini menjadi lebih mudah dan cepat dimengerti, ya lebih baik langsung praktek dan analisa. Kali ini saya menggunakan Shell Script sebagai bahasa programmingnya.

Misalkan ada sebuah variabel seperti ini

satu="ini adalah nilai variabel satu"

Kemudian ada sebuah variabel lagi seperti ini

nilai="satu"

Jika melakukan perintah

echo $nilai

Maka yang dicetak adalah “satu”, Nah bagaimana menggunakan variabel nilai, tapi mencetak nilai variabel dari satu, jika menggunakan PHP seperti di postingan ini bisa dengan

echo $$nilai

Tapi di Shell Programming, bisa juga tapi menggunakan metode ini

echo ${!nilai}

perintah diatas akan mencetak nilai dari variabel satu, yaitu “ini adalah nilai variabel satu”

Pertanyaannya, buat apa metode seperti ini?
Sebenarnya banyak sekali kegunaanya diantaranya seperti kode berikut

x1="bulan ke BULAN tahun 2001"  
x2="bulan ke BULAN tahun 2002"  
x3="bulan ke BULAN tahun 2003"  

Saya ingin mengambil nilai variabel x1, x2 dan x3 kemudian memprosesnya dalam sebuah looping yang sangat panjang, tentu jika menggunakan satu persatu ini akan membuat kode jadi lebih penjang, seperti ini

x1="bulan ke BULAN tahun 2001"  
x2="bulan ke BULAN tahun 2002"  
x3="bulan ke BULAN tahun 2003"  
for x in {1..12}; do  
     tmp=$(echo $x1 | sed -e s/BULAN/$x/ | sed -e s/tahun/TAHUN/ )  
     echo $tmp  
done  
for x in {1..12}; do  
     tmp=$(echo $x2 | sed -e s/BULAN/$x/ | sed -e s/nilai/TAHUN/ )  
     echo $tmp  
done  
for x in {1..12}; do  
     tmp=$(echo $x3 | sed -e s/BULAN/$x/ | sed -e s/nilai/TAHUN/ )  
     echo $tmp  
done  

Hal kaya gini membuat kode jadi lebih panjang, apalagi nilai variabel utama seperti x1 itu sangat banyak. Dengan menggunakan variabel variabel kode diatas bisa dipersingkat menjadi seperti ini

x1="bulan ke BULAN tahun 2001"  
x2="bulan ke BULAN tahun 2002"  
x3="bulan ke BULAN tahun 2003"  
for y in {1..3}; do  
     yy="x$y"  
     vv=${!yy}  
     for x in {1..12}; do  
          tmp=$(echo $vv | sed -e s/BULAN/$x/ | sed -e s/tahun/TAHUN/ )  
          echo $tmp  
     done  
done  

Terlihat kalo kode menjadi lebih singkat, apalagi jika variabel x1 tersebut mencapai 20 atau lebih kode akan menjadi sangat panjang.
Selain menggunakan metode diatas yaitu
${!namaVariabel}
bisa juga menggunakan metode ini
eval echo $echo $namaVariabel``

/************** END ***************/

Referensi