Dolar işaretlerine nasıl eko yapabilirim?


67

Örneğin, $PATHve$HOME

Ben echo $PATHyazdığımda benim döndürür $PATH, ancak sözcüğü yankılamak istiyorum $PATHve asıl değişkenin ne anlama geldiğini echo "$PATH"değil, işe yaramaz.


evet gibi tek tırnak kullanın: echo '$PATH'. alıntı hakkında daha fazla bilgi için, bu ve bu
Pandya

@ Don sadece serverfault üzerinde bir dupe gördü. Benim hatam.
geedoubleya


@ StéphaneChazelas Bu soru bundan neredeyse iki yıl daha yeni.
DisplayName

@DisplayName, evet, ancak tüm "X özel karakterini nasıl gösterebilirim" i kapsayan "kanonik" bir soru olarak düşünülmüştür. (Belirli "soruları cevaplamak için kullanılan" kanuni "cover-it-all cevapları fikrini sevdiğimden emin değilim, bu yüzden yakın bir oy yerine yorum olarak ekledim.
Stéphane Chazelas

Yanıtlar:


77

Sadece dolardan kaçman gerekiyor $.

echo \$PATH
$PATH

Veya tek tırnakla çevreleyin:

echo '$PATH'
$PATH

Bu, kelimenin kabuk tarafından yorumlanmamasını sağlayacaktır.


1
Teşekkürler, echo -eadam sayfasında hiçbir şey söylemedi .
DisplayName

-eBayrak, örneğin, genişletmek için kullanılan \tbir hazır sekme karakteri. Parametre genişlemesini önlemek için dolar işaretinden çıkmak ile ilgisi yoktur.
chepner,

2
Bir dosyaya yönlendirirken bu işe yaramaz. echo '\$PATH' >> output.txt"/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" sonuçlarının dosyaya yazılması , "$ PATH" değil.
Cerin

2
Çok ilginç, eğer tek tırnak işaretleri ve kaçan bir karakter kullanıyorsanız, o zaman bu sadece \ $ PATH yankılanması gerekir. Yankı komutunuz hangi işletim sisteminden kaynaklanıyor?
geedoubleya

Sizin için @Cerin @ stéphane cevabı echo '\044*' > first.txtfirst.txt $ * çıktısını çalıştı çalıştı
maq

20

$Çoğu kabuğun sözdiziminde çok özel bir karakterdir. Sadece Bourne benzeri mermilere bakarsak, tanıtmak için kullanılır:

  1. gibi parametre açılımlar $#, $var,${foo:-bar}
  2. olduğu gibi komut değiştirme $(logname)( ${ logname;}alt kabuğu önlemek için bazı kabukları da )
  3. olduğu gibi aritmetik genişleme $((1+1))(ayrıca $[1+1]bazı kabuklarda).
  4. $'\n'veya gibi bazı kabuklarda diğer alıntı biçimleri $"localized string".

Geçen örneğin dışında, bu açılımları / değişimler hala çift tırnak içinde geçmesi (ve iç $"..."bölgesi bashveya ksh93)

$Özel muamele görmesini engellemek için ikisinden birini de alıntılamanız gerekir:

  • tek tırnak: echo '$PATH'veya echo '$'PATH. Genel olarak, çoğu kabuktaki tüm karakterlerden (kendisi hariç) kaçarken kullanmak istediğinizi.
  • blackslash: echo \$PATH. Ayrıca çift tırnak içinde:echo "\$PATH"
  • Bazı kabukları, başka bir alıntı operatörü: echo $'$PATH', echo $'\44PATH'(ASCII uyumlu karakter kümesini varsayılarak),echo $'\u0024'

Veya yukarıda listelenen geçerli bir genişleme biçiminin parçası olmadığından emin olun:

  • echo "$"PATH
  • echo $""PATH,echo $"PATH" . Bunlardan kaçınılmalıdır çünkü bazı mermiler tırnak biçimini beğenir ksh93ve bashdestekler $"...".
  • echo $``PATH. Bunun mümkün olduğunu göstermek dışında neden kullanmak istediğinin bir nedeni yok.
  • echo "${$+$}PATH" ve diğer kıvrımlı olanlar ...

Ya da $başka bir şekilde çıktı alabilirsiniz :

  • Unix uyumlu bir ürünle echo: echo '\044PATH'(başkalarının echoihtiyacı var echo -e '\044PATH')
  • printf '\44PATH\n'
  • kedi << \ EOF
    $ PATH
    EOF

Bu ters eğik çizgilerin, kabuk için de özel oldukları için nasıl alıntı yapılması gerektiğine dikkat edin.

Umarım bunu netleştirmek gerekir, bunu yapmak için birçok yol olmasına rağmen, echo '$PATH'burada başka bir şey kullanmak istemeniz için iyi bir neden yoktur .


1

Kelimenin tam anlamıyla $ içindeki çift tırnak işaretleri sorun olabileceğini unutmayın. $ Dışında çift tırnak işareti üretilerek yapılabilir:

echo "My terminal is $term, first file found in /dev is </dev/`ls /dev | head -n 1`>, the
dollar symbol is '"`echo '$'`"', and a newspaper costs "`echo '$'`"2.50."

or like this:

echo "$term is the value of "'$term'

ÇIKTI:

My terminal is xterm, first file found in /dev is </dev/acpi>, the dollar symbol
is '$', and a newspaper costs $2.50.

xterm is the value of $term

Veya echo "$term is the value of \$term"daha önce başka bir cevapta açıklandığı gibi. Ya printf '%s is the value of $term\n' "$term"da zaten bir kişi echokeyfi veriler için kullanmamalı .
Stéphane Chazelas

-2

kullanın:

echo ''\$PATH'' >> output.txt 

Bu çalışacak.


2
Lütfen aşağı oylamada bir yorum ekleyin
andreas-h

2
Veyaec""h'''o''' ''""''\$P''A""TH''
Stéphane Chazelas

Bu cevabın ne tarafından yapıldığından emin değilim. Cevap, \ $ veya tek tırnak kullanmaktır. echo '$ PATH' $ PATH yazdıracak echo '\ $ PATH' yazacak \ $ PATH echo "\ $ PATH" yazacak $ PATH echo '' \ $ PATH '' yazdı teknik olarak doğru olanı yapacak, ancak iki boş dize hiçbir amaca hizmet etmemek.
bobpaul
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.