GNU/Linux >> Belajar Linux >  >> Linux

Perbedaan Antara Kutipan Tunggal dan Ganda di Bash Shell

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.

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.


Linux
  1. Perbedaan Antara Perintah Bawaan Dan Yang Tidak?

  2. Perbedaan Antara [[ $a ==Z* ]] Dan [ $a ==Z* ]?

  3. Perbedaan Antara Variabel Shell Yang Diekspor Dan Yang Tidak Di Bash?

  1. Linux – Apa Perbedaan Antara `su -` Dan `su –login`?

  2. Apa perbedaan antara nohup dan ampersand

  3. Apa perbedaan antara #!/usr/bin/env bash dan #!/usr/bin/bash?

  1. perintah bash alias dengan tanda kutip tunggal dan ganda

  2. Perbedaan antara ${} dan $() di Bash

  3. Apa perbedaan antara &> dan >&di bash?