<Sebelumnya | Konten | Selanjutnya>
Kutipan Ganda
Jenis kutipan pertama yang akan kita lihat adalah kutipan ganda. Jika kita menempatkan teks di dalam tanda kutip ganda, semua karakter khusus yang digunakan oleh shell kehilangan arti khusus dan diperlakukan sebagai karakter biasa. Pengecualiannya adalah “$”, “\" (garis miring terbalik), dan “`” (kutipan balik). Ini berarti bahwa pemisahan kata, ekspansi pathname, ekspansi tilde, dan ekspansi brace ditekan, tetapi ekspansi parameter, ekspansi aritmatika, dan substitusi perintah masih dilakukan. Dengan menggunakan tanda kutip ganda, kita dapat mengatasi nama file yang mengandung spasi tertanam. Katakanlah kami adalah korban malang dari file bernama dua kata.txt. Jika kami mencoba menggunakan ini pada baris perintah, pemisahan kata akan menyebabkan ini diperlakukan sebagai dua argumen terpisah daripada argumen tunggal yang diinginkan:
[saya@linuxbox ~]$ ls -l dua kata.txt
ls: tidak dapat mengakses dua: Tidak ada file atau direktori seperti itu
ls: tidak dapat mengakses words.txt: Tidak ada file atau direktori seperti itu
[saya@linuxbox ~]$ ls -l dua kata.txt
ls: tidak dapat mengakses dua: Tidak ada file atau direktori seperti itu
ls: tidak dapat mengakses words.txt: Tidak ada file atau direktori seperti itu
Dengan menggunakan tanda kutip ganda, kami menghentikan pemisahan kata dan mendapatkan hasil yang diinginkan; lebih lanjut, kami bahkan dapat memperbaiki kerusakan:
[saya@linuxbox ~]$ ls -l "dua kata.txt"
-rw-rw-r-- 1 me me me 18 2016-02-20 13:03 two words.txt [me@linuxbox ~]$ mv "dua kata.txt" two_words.txt
[saya@linuxbox ~]$ ls -l "dua kata.txt"
-rw-rw-r-- 1 me me me 18 2016-02-20 13:03 two words.txt [me@linuxbox ~]$ mv "dua kata.txt" two_words.txt
Di sana! Sekarang kita tidak perlu terus mengetik tanda kutip ganda yang menyebalkan itu.
Ingat, ekspansi parameter, ekspansi aritmatika, dan substitusi perintah masih berlangsung dalam tanda kutip ganda:
[saya@linuxbox ~]$ echo "$USER $((2+2)) $(kal)"
saya 4 Februari 2016
Su | Mo | Tu | We | Th | Fr | Sa |
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 |
Kita harus meluangkan waktu sejenak untuk melihat pengaruh tanda kutip ganda pada substitusi perintah. Pertama mari kita lihat sedikit lebih dalam tentang cara kerja pemisahan kata. Dalam contoh kami sebelumnya, kami melihat bagaimana pemisahan kata muncul untuk menghapus spasi tambahan dalam teks kami:
[saya@linuxbox ~]$ gema ini adalah
ini adalah sebuah ujian
uji
[saya@linuxbox ~]$ gema ini adalah
ini adalah sebuah ujian
Secara default, pemisahan kata mencari keberadaan spasi, tab, dan baris baru (karakter umpan baris) dan memperlakukannya sebagai pembatas antara kata-kata. Ini berarti bahwa spasi, tab, dan baris baru yang tidak diberi tanda kutip tidak dianggap sebagai bagian dari teks. Mereka hanya berfungsi sebagai pemisah. Karena mereka memisahkan kata-kata menjadi argumen yang berbeda, contoh baris perintah kami berisi perintah yang diikuti oleh empat argumen berbeda. Jika kita menambahkan tanda kutip ganda:
[saya@linuxbox ~]$ gema "ini adalah
tes"
[saya@linuxbox ~]$ gema "ini adalah
ini adalah sebuah ujian
ini adalah sebuah ujian
pemisahan kata ditekan dan ruang yang disematkan tidak diperlakukan sebagai pembatas, melainkan menjadi bagian dari argumen. Setelah tanda kutip ganda ditambahkan, baris perintah kami berisi perintah yang diikuti oleh satu argumen.
Fakta bahwa baris baru dianggap sebagai pembatas oleh mekanisme pemisahan kata menyebabkan efek yang menarik, meskipun halus, pada substitusi perintah. Pertimbangkan hal berikut:
[saya@linuxbox ~]$ gema $(kal)
Februari 2016 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 XNUMX XNUMX XNUMX XNUMX XNUMX XNUMX XNUMX XNUMX XNUMX XNUMX XNUMX XNUMX XNUMX
[saya@linuxbox ~]$ gema "$(kal)"
Februari 2016
Su | Mo | Tu | We | Th | Fr | Sa |
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 |
Dalam contoh pertama, substitusi perintah yang tidak dikutip menghasilkan baris perintah yang berisi 38 argumen. Yang kedua, baris perintah dengan satu argumen yang menyertakan spasi dan baris baru yang disematkan.