Apa perbedaan antara $ string yang dikutip dan string $ ganda dalam bash?


9

Saya mencoba untuk mengeksekusi baris baru menggunakan echodan mencoba mengikuti dua perintah:

  1. Perintah pertama:

    echo $'Hello World\nThis is a new line'

    Tanggapan:

    Hello World
    This is a new line
    
  2. Perintah kedua:

    echo $"Hello World\nThis is a new line"

    Tanggapan:

    Hello World\nThis is a new line

Pertanyaan saya adalah apa perbedaan antara string yang dibungkus dengan $' 'vs string yang dibungkus dengan $" "di bash's echo?


Catatan bermanfaat: Kutipan ganda juga dikenal sebagai kutipan lemah dan Kutipan tunggal juga dikenal sebagai kutipan kuat.
Rafaf Tahsin

2
Ya, tapi "weak quote"dan 'strong quote'berbeda dari $'C String'dan $"I18N String".
DopeGhoti

Anda MVP yang asli. : D >>> @DopeGhoti
Rafaf Tahsin

Saya melakukan apa yang saya bisa (:
DopeGhoti

Jawaban:


10

Seperti yang dijelaskan di sini , sintaks $'string'menentukan string gaya-C yang mencakup karakter yang lolos sihir, seperti \nuntuk baris baru. $"string"adalah untuk ekspansi I18N, yang tidak memiliki keajaiban seperti itu.

Perhatikan bahwa ini berbeda dari yang lebih umum "string"(penawaran lemah) dan 'string'(penawaran kuat).


9

Di $awal string di:

echo $'Hello World\nThis is a new line'

menyebabkan urutan melarikan diri ditafsirkan.

Manual referensi Bash [mengatakan]

Kata-kata dalam bentuk $ 'string' diperlakukan secara khusus. Kata diperluas ke string, dengan karakter backslash-escaped diganti sebagaimana ditentukan oleh standar ANSI C. ...
..
Hasil yang diperluas dikutip satu, seolah tanda dolar belum ada.

Tapi

echo $"Hello World\nThis is a new line"

sama sekali berbeda. Ini [Artikel] pada terjemahan lokal yang spesifik mengatakan:

String yang dikutip ganda didahului oleh tanda dolar ('$') akan menyebabkan string diterjemahkan sesuai dengan lokal saat ini. Jika lokal saat ini adalah C atau POSIX, tanda dolar diabaikan. Jika string diterjemahkan dan diganti, penggantiannya dikutip ganda.


Catatan: IIRC keduanya $'string'dan $"string"mungkin tidak menemukan dukungan di antara shell yang berbeda. Tidak hanya orang-orang dari kerang lain melihat mereka dengan rasa ingin tahu, tetapi juga mereka berdebat tentang apakah ini bisa dihindari untuk skrip portabilitas.


1
ksh93juga mengerti $'...'.
Kusalananda

@ Kusalananda: Hmm, Catatan bagus :)
sjsam

4
$'xxx'bukan bashism tetapi pertama kali diperkenalkan oleh kshbeberapa tahun sebelumnya bash. Saat ini juga didukung oleh zshdan busybox shsedang ditinjau oleh standar POSIX.
jlliagre

@ jlliagre: Menghargai waktu :). Saya berdiri dikoreksi ..
sjsam
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.