Skrip yang menuliskan nama folder yang sama di sepuluh tempat adalah skrip yang rapuh: satu perubahan, sepuluh baris harus diedit. Variabel menyelesaikannya — satu nama menampung satu nilai, cukup diubah di satu tempat. Di bash, variabel tidak perlu deklarasi tipe: semua nilai adalah string, dan bash menafsirkannya sebagai angka hanya pada operator aritmetika. Chapter ini membahas cara membuat dan membaca variabel, peran vital tanda kutip, serta parameter expansion yang memangkas banyak perintah ekstra.
Membuat dan Membaca Variabel #
Penugasan ditulis nama=nilai — tanpa tanda dolar, dan tanpa spasi di kiri-kanan =. Untuk membaca nilai, baru tanda dolar dipakai: $nama. Sebagai konvensi, variabel buatan kita memakai huruf kecil karena huruf besar dipakai variabel sistem seperti PATH, HOME, dan USER yang sudah kita kenal dari Chapter Environment Variables:
nama="Budi"
kota="Bandung"
echo "$nama tinggal di $kota"
file="${nama}_catatan.txt"
echo "$file"
echo "$nama_file"Output yang Dihasilkan:
Budi tinggal di Bandung
Budi_catatan.txtBaris echo "$nama_file" mencetak baris kosong karena nama_file adalah nama variabel yang berbeda — dan belum diisi. Kurung kurawal pada ${nama}_catatan.txt menandai batas nama variabel secara tepat, sehingga suffix _catatan.txt tidak ikut dianggap bagian dari nama. Bentuk prefiks nama=nilai perintah juga sah: penugasan itu berlaku hanya untuk satu perintah tersebut, pola yang kita pakai untuk PATH=... salam di Chapter Bash Basics.
Kesalahan klasik pemula adalah meniru gaya bahasa lain dengan memberi spasi di sekitar =:
NAMA = Budi 2>&1Output yang Dihasilkan:
bash: NAMA: command not foundBash memecah baris tersebut berdasarkan spasi, lalu mencoba menjalankan perintah bernama NAMA dengan dua argumen: = dan Budi. Perintah NAMA tidak ada, sehingga laporannya command not found dengan exit code 127 — persis pola kesalahan ketik yang pernah kita bedah di Chapter Exit Codes.
Kutip Ganda, Kutip Tunggal, Tanpa Kutip #
Tiga cara menuliskan nilai memberi tiga perlakuan berbeda terhadap isi variabel:
| Penulisan | Ekspansi $nama | Spasi |
|---|---|---|
"..." kutip ganda | jalan | terjaga |
'...' kutip tunggal | tidak jalan | terjaga |
| tanpa kutip | jalan | dipecah (word splitting) |
nama="Budi"
kota="Bandung Jakarta"
echo "ganda : $nama dari $kota"
echo 'tunggal: $nama dari $kota'
echo tanpa : $nama dari $kotaOutput yang Dihasilkan:
ganda : Budi dari Bandung Jakarta
tunggal: $nama dari $kota
tanpa : Budi dari Bandung JakartaKutip ganda meneruskan ekspansi variabel sambil menjaga spasi; kutip tunggal menuliskan teks apa adanya sehingga cocok untuk teks yang memuat tanda dolar literal. Baris tanpa kutip memperlihatkan jebakannya: lima spasi di dalam $kota menyusut menjadi satu karena tanpa kutip, bash memecah nilai menjadi kata-kata lalu echo menyambungnya kembali dengan satu spasi.
Parameter Expansion: Mengolah Nilai Tanpa Perintah Tambahan #
Bash bisa mengolah nilai variabel langsung pada saat dibaca — teknik ini disebut parameter expansion. Skrip berikut memakai tiga bentuk yang paling sering dibutuhkan:
cat > profil.sh << 'AKHIR'
#!/bin/bash
# profil.sh -- tiga bentuk parameter expansion
nama="Budi Santoso"
berkas="laporan.pdf"
echo "nama : ${nama:-tanpa nama}"
echo "panjang : ${#nama} karakter"
echo "nama file : ${berkas%.pdf}"
AKHIR
bash profil.shOutput yang Dihasilkan:
nama : Budi Santoso
panjang : 12 karakter
nama file : laporanMari kita bedah isi profil.sh baris per barisnya:
- Baris 4 (
nama=...danberkas=...): dua variabel data — sebuah nama lengkap dan sebuah nama file — yang menjadi bahan olahan. - Baris 6 (
${nama:-tanpa nama}): membacanama; bila kosong atau belum diisi, teks setelah:-dipakai sebagai nilai cadangan. Bentuk ini membuat skrip tetap sopan saat data tidak lengkap. - Baris 7 (
${#nama}): menghasilkan panjang nilainamadalam jumlah karakter —Budi Santosoberisi 12 karakter termasuk satu spasi. - Baris 8 (
${berkas%.pdf}): memangkas akhiran.pdfdari nilaiberkas;%polaberarti “buang pola yang menempel di ekor”.
Ketiganya bekerja tanpa menjalankan wc, cut, atau sed — tidak ada subproses, sehingga cepat dan ringkas. Masih banyak bentuk lain seperti ${variabel/pola/pengganti} untuk mengganti potongan teks; daftar lengkapnya ada di bagian Parameter Expansion halaman manual bash(1)
.
Dengan variabel, data kini mengalir di dalam skrip. Skrip berikutnya perlu dua kemampuan baru: menyapa pengguna yang mengetik namanya, dan mencetak laporan yang rapi — keduanya dibahas di Chapter Input dan Output.