Matching File Names with Shell Expansions (Section 3.9)
Tags: ramadhanbersamaredhat, redhat124, cloudcomputing, chapter3
Published: 2024-03-22 05:18:02

**Tujuan**
Dapat menjalankan perintah yang memengaruhi banyak file secara efisien dengan menggunakan fitur pencocokan pola pada shell Bash.

**Command-line Expansions**
Shell Bash memiliki banyak cara untuk memperluas baris perintah termasuk pencocokan pola (pattern matching), perluasan direktori home, perluasan string, dan substitusi variabel. Mungkin yang paling kuat di antaranya adalah kemampuan pencocokan nama jalur (matching capability), yang secara historis disebut menggelembung (globbing). Fitur Bash globbing, terkadang disebut “wildcard”, membuat pengelolaan file dalam jumlah besar menjadi lebih mudah. Menggunakan _metacharacters_ yang “memperluas” untuk mencocokkan nama file dan jalur yang dicari, perintah dijalankan pada kumpulan file terfokus sekaligus.

**Pattern Matching**
Globbing adalah operasi penguraian perintah shell yang memperluas pola wildcard ke dalam daftar nama jalur yang cocok. Metakarakter baris perintah digantikan oleh daftar kecocokan sebelum eksekusi perintah. Pola yang tidak mengembalikan kecocokan menampilkan permintaan pola asli sebagai teks literal. Berikut ini adalah metakarakter umum dan kelas pola.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gph2zc0icpkl5q7e8rp2.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e2tanblzuawb2rnppuu9.png)

Untuk beberapa contoh berikutnya, anggaplah Anda telah menjalankan perintah berikut untuk membuat beberapa file sampel.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t5gzafxlnclgdjatdjlp.png)

Contoh pertama akan menggunakan pencocokan pola sederhana dengan karakter asterisk (*) dan tanda tanya (?), serta kelas karakter, untuk mencocokkan beberapa nama file tersebut.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jeukvb8yblwzirmxebh.png)

**Tilde Expansion**
Karakter tilde (~), cocok dengan direktori home pengguna saat ini. Jika ia memulai serangkaian karakter selain garis miring (/), shell akan menafsirkan string hingga garis miring tersebut sebagai nama pengguna, jika ada yang cocok, dan mengganti string tersebut dengan jalur absolut ke direktori home pengguna tersebut. Jika tidak ada nama pengguna yang cocok, maka tanda gelombang sebenarnya yang diikuti dengan rangkaian karakter akan digunakan.

Pada contoh berikut perintah echo digunakan untuk menampilkan nilai karakter tilde. Perintah echo juga dapat digunakan untuk menampilkan nilai karakter kurung kurawal dan ekspansi variabel, dan lain-lain.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qaruiuma3qle4l32808f.png)

**Brace Expansion**
Brace Expansion (ekspansi kurung kurawal) digunakan untuk menghasilkan rangkaian karakter yang bersifat diskresioner. Tanda kurung berisi daftar string yang dipisahkan koma, atau ekspresi urutan. Hasilnya mencakup teks sebelum atau sesudah definisi kurung kurawal. Perluasan penahan dapat disarangkan, satu di dalam yang lain. Sintaks titik ganda (..) juga diperluas ke urutan sedemikian rupa sehingga {m..p} akan diperluas ke m n o p.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cnvok4h4nyr3b26xpyc0.png)

Kegunaan praktis dari ekspansi brace adalah dengan cepat membuat sejumlah file atau direktori.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kx1lt4255j1csnouav3l.png)

**Variable Expansion**
Variabel bertindak seperti wadah bernama yang dapat menyimpan nilai di memori. Variabel memudahkan untuk mengakses dan memodifikasi data yang disimpan baik dari baris perintah atau dalam skrip shell.
Anda dapat menetapkan data sebagai nilai ke variabel menggunakan sintaks berikut:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8j8z0iof126w5v7ji8e6.png)

Anda dapat menggunakan ekspansi variabel untuk mengonversi nama variabel menjadi nilainya pada baris perintah. Jika sebuah string dimulai dengan tanda dolar ($), maka shell akan mencoba menggunakan sisa string tersebut sebagai nama variabel dan menggantinya dengan nilai apa pun yang dimiliki variabel tersebut.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sq56jmdbqma6746xdanf.png)

Untuk membantu menghindari kesalahan akibat perluasan shell lainnya, Anda dapat memasukkan nama variabel dalam kurung kurawal, misalnya ${VARIABLENAME}.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p5rwy5fd8ojj6ui49rey.png)
Variabel shell dan cara menggunakannya akan dibahas lebih mendalam nanti di kursus ini.

**Command Substitution**
Substitusi perintah memungkinkan keluaran suatu perintah untuk menggantikan perintah itu sendiri pada baris perintah. Substitusi perintah terjadi ketika suatu perintah diapit tanda kurung, dan diawali dengan tanda dolar ($). Formulir $(command) dapat menyarangkan beberapa perluasan perintah di dalam satu sama lain.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bqvygmwmz3cv4hhguyn3.png)

**Protecting Arguments from Expansion**
Banyak karakter yang memiliki arti khusus di shell Bash. Untuk mencegah shell melakukan ekspansi shell pada bagian baris perintah Anda, Anda bisa _quote_ dan _escape_ karakter dan string.

Garis miring terbalik (\) adalah karakter escape di shell Bash. Ini akan melindungi karakter yang mengikutinya dari ekspansi.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ek6z958kttf8cuntw5e3.png)

Dalam contoh sebelumnya, melindungi tanda dolar dari ekspansi menyebabkan Bash memperlakukannya sebagai karakter biasa dan tidak melakukan ekspansi variabel pada $HOME.

Untuk melindungi string karakter yang lebih panjang, tanda kutip tunggal (') atau tanda kutip ganda (") digunakan untuk mengapit string. Efeknya sedikit berbeda. Tanda kutip tunggal menghentikan semua perluasan shell. Tanda kutip ganda menghentikan _most_ shell expansion.

Gunakan tanda kutip ganda untuk menekan ekspansi globbing dan shell, namun tetap mengizinkan substitusi perintah dan variabel.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/msn56wy5mn1o7npnvysp.png)
Gunakan tanda kutip tunggal untuk menafsirkan semua teks secara harfiah.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0xmlamojhsuac713nze7.png)

Tanda kutip tunggal (') dan tanda kutip balik (`) dapat dengan mudah membingungkan, baik di layar maupun di keyboard. Menggunakan salah satu ketika Anda ingin menggunakan yang lain akan menyebabkan perilaku shell yang tidak terduga.