Anda akan sering menggunakan tanda kutip di baris perintah Linux. Berurusan dengan spasi dalam nama file? Anda menggunakan kutipan. Menangani karakter khusus? Anda menggunakan tanda kutip lagi.
Kutipan adalah 'fitur khusus' di shell Linux dan mungkin membingungkan, khususnya jika Anda baru mengenal perintah Linux dan skrip shell.
Saya akan menjelaskan berbagai jenis karakter kutipan dan penggunaannya dalam skrip shell.
Ada empat jenis karakter kutipan yang berbeda:
- Kutipan tunggal '
- Kutipan ganda "
- Garis miring terbalik
- Kutipan kembali `
Kecuali serangan balik, tiga karakter lainnya muncul secara berpasangan.
Mari kita lihat secara detail.
1. Kutipan tunggal
Kutipan tunggal di Shell mengabaikan semua jenis karakter khusus di dalamnya. Segala sesuatu di antara tanda kutip tunggal dianggap sebagai satu elemen tunggal.
Mari kita ambil dengan contoh. Berikut adalah contoh file teks dengan beberapa pemain kriket dari tahun 90-an.
[email protected]:~$ cat cricket
Allan Donald, South Africa
Steve Waugh, Australia
Mark Waugh, Australia
Henry Olonga, Zimbabwe
Sachin Tendulkar, India
Sekarang, Anda menggunakan perintah grep untuk mencari pemain kriket dengan nama keluarga Waugh. Ini akan memberi Anda dua hasil:
[email protected]:~$ grep Waugh cricket
Steve Waugh, Australia
Mark Waugh, Australia
Tetapi jika Anda ingin mencari Steve Waugh saja, dan Anda mencoba menggunakannya apa adanya, Anda akan melihat kesalahan:
[email protected]:~$ grep Steve Waugh cricket
grep: Waugh: No such file or directory
cricket:Steve Waugh, Australia
Mengapa? Karena spasi digunakan untuk memisahkan perintah, opsi dan argumen. Pada contoh di atas, dibutuhkan Steve
sebagai argumen pertama untuk grep tapi Waugh
dan cricket
diambil sebagai file di mana ia harus mendahului pencarian. Karena tidak ada file bernama Waugh
, itu melempar kesalahan untuk itu. Pada saat yang sama, itu juga menunjukkan hasil dari file cricket
.
Di sinilah kutipan datang untuk menyelamatkan. Saat Anda menyertakan argumen dalam tanda kutip, itu ditafsirkan sebagai satu entitas.
[email protected]:~$ grep 'Steve Waugh' cricket
Steve Waugh, Australia
Pada dasarnya, ketika shell melihat kutipan tunggal pertama, shell mengabaikan karakter khusus (spasi putih juga merupakan karakter khusus) sampai menemukan kutipan tunggal lainnya (penutup).
Mengabaikan semua karakter khusus
Semua karakter khusus kehilangan artinya jika diapit dalam tanda kutip tunggal. Mari kita lihat dengan contoh.
Mari kita mendeklarasikan variabel di shell. Jika Anda menggemakan nama variabel dengan $, itu menunjukkan nilai variabel.
[email protected]:~$ var=my_variable
[email protected]:~$ echo $var
my_variable
Tetapi jika Anda membungkusnya dengan tanda kutip tunggal, $ akan kehilangan kekuatan spesialnya.
[email protected]:~$ echo '$var'
$var
Sekarang hanya itu. Tombol enter juga disimpan di bawah tanda kutip tunggal.
[email protected]:~$ echo 'how are
> you?'
how are
you?
2. Kutipan ganda
Tanda kutip ganda bekerja hampir mirip dengan tanda kutip tunggal. Hampir karena mereka juga cenderung mengabaikan semua karakter khusus kecuali:
- Dolar menandatangani $
- Kutipan kembali `
- Garis miring terbalik
Karena tanda dolar tidak diabaikan, Anda dapat mengharapkan nama variabel diganti dengan nilainya. Tidak demikian halnya dengan tanda kutip tunggal.
[email protected]:~$ var=my_variable
[email protected]:~$ echo "$var"
my_variable
[email protected]:~$ echo '$var'
$var
Tanda kutip ganda dapat digunakan untuk menyembunyikan tanda kutip tunggal dari shell.
[email protected]:~$ var=My 'own villa' is yellow
own villa: command not found
[email protected]:~$ var="My 'own villa' is yellow"
[email protected]:~$ echo $var
My 'own villa' is yellow
Demikian pula, Anda dapat menggunakan tanda kutip tunggal untuk menyembunyikan tanda kutip ganda dari shell.
[email protected]:~$ var=he said, "Awesome!"
said,: command not found
[email protected]:~$ var='he said, "Awesome!"'
[email protected]:~$ echo $var
he said, "Awesome!"
3. Garis miring terbalik
Garis miring terbalik seperti menempatkan tanda kutip tunggal di sekitar satu karakter. Garis miring terbalik 'melarikan diri' dari karakter yang diletakkan sebelumnya.
Artinya, karakter yang diikuti oleh garis miring terbalik akan kehilangan arti khususnya (jika ada).
[email protected]:~$ var=variable
[email protected]:~$ echo \var
var
[email protected]:~$ echo $var
variable
[email protected]:~$ echo \$var
$var
Karena v
tidak memiliki arti khusus, echo \var
cukup mencetak var. Di sisi lain, ketika digunakan dengan $var
, garis miring terbalik lolos dari arti khusus $
dan karenanya dicetak sebagai $var
bukannya nilai var
.
Lanjutkan baris dengan garis miring terbalik
Anda akan melihat penggunaan praktis lain dari karakter garis miring terbalik dalam melanjutkan satu perintah pada beberapa baris.
Ketika sebuah perintah terlalu panjang atau jika itu adalah kombinasi dari perintah, Anda akan melihat beberapa situs web menggunakan garis miring terbalik untuk menampilkan satu perintah di lebih dari satu baris. Ini membuat perintah/kode lebih mudah dibaca.
Ambil perintah panjang ini misalnya.
docker run --name server --network net -v html:/usr/share/nginx/html -v $PWD/custom-config.conf:/etc/nginx/nginx.conf -p 80:80 --restart on-failure -d nginx:latest
Perintah yang sama dapat dipecah menjadi beberapa baris berkat garis miring terbalik.
docker run --name server --network net \
-v html:/usr/share/nginx/html \
-v $PWD/custom-config.conf:/etc/nginx/nginx.conf \
-p 80:80 --restart on-failure -d nginx:latest
Perintahnya sama, hanya sedikit lebih mudah dipahami.
Garis miring terbalik di dalam tanda kutip ganda
Garis miring terbalik adalah salah satu dari tiga karakter khusus yang memiliki arti khusus bersama dengan tanda dolar dan tanda kutip belakang.
Dengan cara ini, Anda dapat menggunakan garis miring terbalik untuk menghindari arti khusus dari tanda dolar, tanda kutip ganda, dan tanda kutip balik dalam tanda kutip ganda.
Ambil contoh di bawah ini di mana $5
dianggap sebagai variabel yang tidak dideklarasikan dan karenanya tidak memiliki nilai. Inilah sebabnya mengapa diabaikan dari output perintah echo.
[email protected]:~$ echo "Meal costs $5.25"
Meal costs .25
Untuk menggunakan $ ini tanpa ditafsirkan sebagai nilai variabel, Anda harus menghindarinya dengan /.
[email protected]:~$ echo "Meal costs \$5.25"
Meal costs $5.25
Di sini, garis miring terbalik (\) ditafsirkan sebagai kekuatan supernya, yaitu menghindari makna khusus karakter berikutnya.
4. Kutipan kembali
Yang terakhir dalam daftar ini adalah kutipan balik dan memiliki arti khusus. Ini digunakan untuk substitusi perintah.
Shell memiliki fitur substitusi perintah ini di mana perintah tertentu diganti dengan output dari perintah tersebut.
Pada contoh di bawah, `date` diganti dengan output dari perintah date yang menunjukkan tanggal dan waktu saat ini dari sistem Linux.
[email protected]:~$ echo The current date and time is `date`
The current date and time is Monday 23 August 2021 04:55:18 PM IST
Satu hal yang perlu diingat adalah bahwa substitusi hanya akan terjadi jika ada perintah di antara tanda kutip belakang. Jika tidak, akan ditampilkan apa adanya.
[email protected]:~$ echo 'The current date and time is `late`'
The current date and time is `late`
Sekali lagi, tanda kutip ganda menafsirkan tanda kutip belakang tetapi tanda kutip tunggal mengabaikan arti khususnya.
Kutipan mundur tidak disarankan lagi
Selama bertahun-tahun, tanda kutip kembali digunakan untuk substitusi perintah dalam skrip Shell. Namun dewasa ini, sistem UNIX dan Linux modern lebih memilih $(command)
membangun sebagai gantinya.
[email protected]:~$ echo The current date and time is $(date)
The current date and time is Monday 23 August 2021 05:55:47 PM IST
Ikuti waktu dan berhenti menggunakan tanda kutip kembali sekarang.
Saya harap Anda memiliki pemahaman yang lebih baik tentang kutipan di Linux dan skrip shell sekarang.
Silakan tinggalkan saran dan pertanyaan Anda di bagian komentar.