Bash içindeki tek tırnaklı $ 'string' ve çift tırnaklı $ “string” arasındaki fark nedir?


9

Kullanarak yeni bir satır yürütmek çalışıyordum echove aşağıdaki iki komutu denedim:

  1. İlk komut:

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

    Tepki:

    Hello World
    This is a new line
    
  2. İkinci komut:

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

    Tepki:

    Hello World\nThis is a new line

Sorum ile sarılmış dize arasındaki fark nedir olduğu $' 'ile sarılmış dize vs $" "içinde bash's echo?


Faydalı not: Çift tırnak, zayıf tırnak olarak da bilinir ve Tek tırnak da güçlü tırnak olarak bilinir.
Rafaf Tahsin

2
Evet ama "weak quote"ve 'strong quote'farklıdır $'C String've $"I18N String".
DopeGhoti

Sen gerçek MVP. : D >>> @DopeGhoti
Rafaf Tahsin

Yapabileceğimi yaparım (:
DopeGhoti

Yanıtlar:


10

As açıkladı Burada , sözdizimi $'string'gibi sihirli kaçan karakterler içeriyor C tarzı dizelerini belirten \nbir Yenisatır için. $"string"böyle sihirli bir kaçış olmayan I18N genişlemesi içindir.

Bunların daha yaygın "string"(zayıf alıntı) ve 'string'(güçlü alıntıdan) farklı olduğunu unutmayın.


9

$Dizede başında:

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

kaçış dizilerinin yorumlanmasına neden olur.

Bash referans kılavuzu [diyor]

$ 'String' biçimindeki kelimeler özel olarak ele alınır. Sözcük dizeye genişler, ters eğik çizgiden kaçan karakterler ANSI C standardında belirtildiği gibi değiştirilir. ..
..
Genişletilmiş sonuç dolar işareti yokmuş gibi tek tırnak içine alınır.

Fakat

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

tamamen farklı. Yerel ayara özel çeviri hakkındaki bu [makale] diyor:

Dolar işareti ('$') ile başlayan çift tırnaklı bir dize, dizenin geçerli yerel ayara göre çevrilmesine neden olur. Geçerli yerel ayar C veya POSIX ise, dolar işareti yok sayılır. Dize çevrilir ve değiştirilirse, değiştirme çift tırnak içine alınır.


Not: Her ikisi de IIRC $'string've $"string"farklı kabuklar arasında destek bulamayabilir. Diğer kabuklardan insanlar sadece merakla bakmakla kalmaz, aynı zamanda senaryo taşınabilirliği için bunun önlenip önlenemeyeceği konusunda da tartışırlar.


1
ksh93Ayrıca anlar $'...'.
Kusalananda

@Kusalananda: Hmm, İyi not :)
sjsam

4
$'xxx'bir bashizm değil, ilk kshönce birkaç yıl önce tanıtıldı bash. Şu anda POSIX standardı tarafından da desteklenmektedir zshve busybox shPOSIX standardı tarafından incelenmektedir.
jlliagre

@jlliagre: Zamanı takdir et :). Düzeltilmiş duruyorum ..
sjsam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.