Bash Brace Expansion
Hmmm, apakah gerangan bash
brace expansion itu?
Bash
brace expansion adalah sebuah cara untuk menghasilkan string berdasar pola tertentu.
I don’t get it…
Izinkan saya untuk menjelaskan melalui contoh sebuah script bash
.
Silahkan buka GitHub gist TeleBSE, sebuah script bash
untuk mengambil tautan ke berkas PDF Buku Sekolah Elektronik. Dalam script tersebut ada beberapa baris yang mendayagunakan mekanisme bash
brace expansion, mari kita bahas satu per satu.
Yang pertama adalah:mkdir -p $BASEDIR/{SD_{1..6},SMP_{7..9},SMA_{10..12},SMK_{10..12}}
Arti dari baris tersebut adalah: Buat map-map (folders) SD_1
, SD_2
, SD_3
, SD_4
, SD_5
, SD_6
, SMP_7
, SMP_8
, SMP_9
, SMA_10
, SMA_11
, SMA_12
, SMK_10
, SMK_11
, dan SMK12
.
Jika tanpa bash
brace expansion, maka kemungkinan perintahnya adalah sebagai berikut:cd $BASEDIR
mkdir SD_1 SD_2 SD_3 SD_4 SD_5 SD_6 SMP_7 SMP_8 SMP_9 SMA_10 SMA_11 SMA_12 SMK_10 SMK_11 SMK12
Wow! Is’t it amazing…
Jadi, bash
brace expansion menghasilkan string baru dengan pola tertentu. Dari contoh di atas:SD_{1..6}
Dikembangkan menjadi:SD_1 SD_2 SD_3 SD_4 SD_5 SD_6
Mari kita lihat contoh berikutnya pada baris:for kelas in {SD_{1..6},SMP_{7..9},SMA_{10..12},SMK_{10..12}}; do
Baris for-loop ini akan menelusuri tiap map mulai dari SD_1
hingga SMK_12
.
Jika menggunakan for-loop biasa, perintahnya adalah sebagai berikut:for kelas in SD_1 SD_2 SD_3 SD_4 SD_5 SD_6 SMP_7 SMP_8 SMP_9 SMA_10 SMA_11 SMA_12 SMK_10 SMK_11 SMK12; do
Lihat bagaimana bash
brace expansion bisa menyederhanakan script kita.
Dari dua contoh di atas kiranya kita dapat memahami kegunaan bash
brace expansion. Misal, untuk menyingkat dan menyederhanakan script dan mengurangi gerak jari dalam mengetik baris perintah.
Misal, kita hendak merubah nama atau memindahkan suatu berkas yang memiliki path yang panjang:mv /tmp/test/folder/untuk/menunjukkan/path/yang/panjang/dan/dalam/berkas /tmp/test/folder/untuk/menunjukkan/path/yang/panjang/dan/dalam/file
Lumayan panjang kan? Meski menggunakan bash-completion
pun akan tetap membosankan. Di sini kita bisa menggunakan bantuan bash
brace expansion:mv /tmp/test/folder/untuk/menunjukkan/path/yang/panjang/dan/dalam/{berkas,file}
Mencadangkan sebuah berkas dengan cara menyalin dan memberi akhiran -bak
pada namanya?cp /tmp/myscript.sh{,-bak}
Hendak mengembalikan berkas myscript.sh-bak
kembali menjadi myscript.sh
?mv /tmp/myscript.sh{-bak,}
Demikian artikel hari ini, semoga bermanfaat…