Komut dosyasında bir $ “dollarsign-prefixed string” olması ne anlama geliyor?


81

Bunu bir init betiğinde gördüm.

echo $"Stopping Apache"

Bu dolar işareti ne için?

Şimdiye kadarki araştırmam:

Bunu bash kılavuzunda buldum:

extquote

Set, varsa $'string've $"string"alıntı dahilinde gerçekleştirilir ${parameter}çift tırnak içine açılımları. Bu seçenek varsayılan olarak etkindir.

... ama $önek olan ve olmayan dizeler arasında bir fark bulamıyorum :

$ echo "I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo "I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo 'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in $PWD'
I am in $PWD

Yanıtlar:


111

Her ikisi de bashkılavuzda belgelenen, burada iki farklı şey oluyor

$'

Dolar işareti tek teklif, özel bir alıntı şeklidir:

ANSI C Alıntılama

$ 'String' formundaki kelimeler özel olarak değerlendirilir. Sözcük, ANSI C standardında belirtildiği şekilde ters eğik çizgi karakterleriyle değiştirilen dizeye genişler.

$"

Dolar işareti çift teklif yerelleştirme içindir:

Yerel çeviri

Dolar işaretinden ('$') önce gelen çift tırnaklı bir dize, dize geçerli yerel ayarlara göre çevrilir. Geçerli yerel ayar C veya POSIX ise, dolar işareti yoksayılır. Dize çevrilir ve değiştirilirse, değiştirme iki kez alıntılanır.


22

Bir dize içinde genişlediğinde $'', kaçış dizileri yorumlanır. Manpage'den:

Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by  the
ANSI  C  standard.

Kolay bir örnek, bir yeni satır için \ n kaçış dizisidir:

$ echo 'foo\n'
foo\n
$ echo $'foo\n'
foo

$ 

Not: Başka kabuklarda, echoseçenekler olmadan, kaçış dizilerini yorumlayabileceğiniz için farklı sonuçlar alabilirsiniz .


8
$"..."Soruya göre , hiçbir söz yok .
Peter.O

-4

Kılavuzu yanlış yorumluyorsun. Yalnızca $ işaretli bir dize bir genişlemenin içindeyken bir efekt görürsünüz ${parameter}.

$ echo "${v:-'ab\ncd'}"
'ab\ncd'
$ echo "${v:-$'ab\ncd'}"
ab
cd

Kaynak ve daha fazla okuma: https://lists.gnu.org/archive/html/bug-bash/2005-10/msg00017.html


6
Bu soruya cevap vermiyor: $"…"farklı bir şey.
Gilles

4
Üzgünüz, ancak cevabınız yanlış: ${}ANSI fiyat teklifi kullanmak için genişleme kullanmanıza gerek yok . Kendiniz kontrol edin:echo $'ab\ncd'
rozcietrzewiacz

1
Bence bu cevap, extquotesoruyu sormak yerine yanlış bir şekilde açıklamaya çalışıyordu .
jw013

1
"${...}"farklıdır$"..."
GypsyCosmonaut
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.