Saat mencoba mencari pola "halo" sederhana dalam file, semua bentuk kerja grep berikut:
- grep halo file1
- grep 'hello' file1
- grep "halo" file1
Apakah ada kasus khusus di mana salah satu dari bentuk di atas bekerja tetapi yang lain tidak. Apakah ada bedanya jika saya menggunakan satu di tempat yang lain?
$
adalah end-of-line dalam ekspresi reguler, jadi$VAR1
seharusnya tidak pernah benar-benar cocok dengan apa pun. Itu kebetulan bekerja pada GNU grep, tapi saya masih tidak akan mengandalkan perilaku itu. Anda harus\$VAR1
mencocokkan string literal dengan aman. (Dan Anda perlu garis miring terbalik ekstra jika itu dalam tanda kutip ganda.)James benar, tetapi untuk menambahkan lebih banyak data, saya pikir cara terbaik untuk memikirkannya adalah sebagai argumen pada perintah: apakah Anda bermaksud "halo" dan "dunia" menjadi dua argumen atau "halo dunia" menjadi satu argumen.
Juga, tanda kutip ganda memungkinkan interpretasi lebih dari sekadar variabel. Tepatnya apa yang tergantung pada shell Anda, tetapi periksa ekspansi sejarah, ekspansi brace, dan ekspansi nama file.
Penting juga untuk dicatat bahwa ada beberapa contoh di mana Anda perlu menggunakan kedua jenis kutipan dalam satu argumen. Ingatlah bahwa (secara default) argumen dibatasi oleh spasi, jadi jika Anda tidak meninggalkan ruang, Anda masih menentukan argumen yang sama.
Mekanisme singlequote Kebanyakan shell tidak memungkinkan untuk karakter khusus, yang berarti bahwa setiap instance dari singlequote lain, bahkan jika itu tampaknya lolos, mengakhiri kutipan. Oleh karena itu tidak mungkin untuk melewatkan string dengan tanda kutip tunggal di dalam string tanda kutip tunggal, dan Anda harus menggunakan tanda kutip ganda. Ini bisa menyebalkan ketika Anda ingin menyampaikan argumen yang berisi singlequote dan sesuatu yang akan ditafsirkan, tetapi Anda tidak mau. Misalnya, jika Anda ingin meneruskan string literal "` '$ VAR' adalah variabel ", Anda harus melakukannya dengan cara ini:
Itu sebenarnya adalah gabungan dari tiga string kutipan-lolos:
atau, dengan kutipan dihapus:
Sebenarnya, dengan sebagian besar kerang, Anda juga bisa melakukannya dengan cara ini:
di mana backslash ("
\
") memberi tahu shell untuk menerima karakter berikut secara harfiah dan tidak melakukan ekspansi apa pun di atasnya.Tetapi ada beberapa contoh di mana Anda akhirnya harus melakukannya dengan cara multi-string-concatenation, bukan berarti saya benar-benar dapat memberikan contoh sekarang.
sumber