Apa perbedaan antara grep apple file
dan grep "apple" file
? Apa yang dilakukan dengan menempatkan tanda kutip? Keduanya tampak berfungsi dan melakukan hal yang sama persis (menampilkan garis yang sama).
22
Tanda kutip memiliki efek pada karakter apa yang Anda anggap istimewa oleh shell dan memiliki makna sintaksis. Dalam contoh Anda ini tidak membuat perbedaan karena apple
tidak mengandung karakter seperti itu.
Tetapi perhatikan contoh lain: grep apple tree file
akan mencari kata apple
dalam file tree
dan file
, sedangkan grep "apple tree" file
akan mencari kata apple tree
dalam file file
. Tanda kutip memberi tahu bash, bahwa ruang kata di "apple tree"
tidak memulai parameter baru tetapi harus menjadi bagian dari parameter saat ini. grep apple\ tree file
akan menghasilkan hasil yang sama, karena \
memberitahu bash untuk mengabaikan makna khusus karakter berikut dan memperlakukannya secara harfiah.
grep a*b equations.txt
maka ia akan mencaria*b
, kecuali ada file di direktori saat ini dimulai dengan, dan berakhir dengan b, dalam hal ini (karena (ba) sh akan memperluas nama file pada baris perintah) grep akan dipanggil dengan melengkapi parameter yang berbeda, menghasilkan hasil yang berbeda. Ini biasanya lebih merupakan masalah dengan find, karena perintah sepertifind . -name *.txt
akan menghasilkan perilaku yang tidak terduga, jika ada file txt di direktori saat ini. Lebih baik menggunakan kutipan dalam kasus ini."
) dan tanda kutip tunggal ('
). Kutipan tunggal mencegah interpretasi karakter tertentu seperti$
, sedangkan tanda kutip ganda memungkinkan interpretasi. Misalnyagrep '${USER}'
akan mencari teks${USER}
, sedangkangrep "${USER}"
akan mencari teks yangUSER
berisi variabel (misalnyajohnstacen
).Kutipan ganda memungkinkan evaluasi, kutipan tunggal mencegah evaluasi, tidak ada tanda kutip memungkinkan ekspansi wildcard, ketika digunakan pada baris perintah. Sebagai contoh yang dibuat-buat:
Memahami cara kerja kutipan sangat penting untuk memahami Bash. Sebagai contoh:
Anda dapat menggunakan tanda kutip tunggal untuk memberikan perintah melalui variabel. Kutipan tunggal akan mencegah evaluasi. Kutipan ganda akan dievaluasi.
Anda dapat menggunakan tanda kutip tunggal di dalam tanda kutip ganda dan Anda dapat menggunakan tanda kutip ganda di dalam tanda kutip ganda, tetapi tanda kutip ganda di dalam tanda kutip tunggal
tidak boleh dilakukan (tanpa melarikan diri)tidak akan dievaluasi, mereka akan ditafsirkan secara harfiah. Kutipan tunggal dalam tanda kutip tunggal tidak boleh dilakukan (tanpa melarikan diri).Anda harus mendapatkan pemahaman menyeluruh tentang kutipan untuk menggunakan Bash secara efektif. Sangat penting!
Sebagai aturan umum, saya tidak menggunakan tanda kutip jika saya ingin Bash memperluas sesuatu menjadi elemen (seperti array), saya menggunakan tanda kutip tunggal untuk string literal yang tidak dapat diubah, dan saya menggunakan liberal tanda kutip ganda untuk variabel yang cenderung mengembalikan semua jenis string. Ini untuk memastikan bahwa spasi dan karakter khusus akan dipertahankan.
sumber