“”, “Tek tırnak” ve “tırnak” arasındaki çift satırlı komut satırı arasındaki farklar?


43

Sık sık web’de öğreticileri veya bu sitedeki yayınları komut satırında aşağıdaki karakterleri yoğun şekilde kullananlar görüyorum. Genellikle, bunların benzer amaçlar için kullanıldığı görülüyor. Komut satırında veya kabuk programlama için kullanıldığında aralarındaki farklar nelerdir? Hangi amaç için hangisini kullanırım?

" " double quotes

' ' single quotes

` ` backticks

Yanıtlar:


43

Örnek olarak, bu değişkenin fooinclude uname( foo=uname) işlevini dikkate alın .

  • echo "$foo"çıktılar uname, değişkenleri metinde kullanmak.
    • Tırnak $içindeki değişmez karakter "için \$; bir hazır bilgi için "kullanın \".
  • echo '$foo'çıktılar $foo, tam dize.
    • Hatta 'olarak kaçan edilemez \''tırnak. Fakat kullanabilirsiniz 'foo'\''bar'.
  • echo `$foo`çıktılar Linux, değişken içeriğini yürütür ve echoyazdırır.

\tek tırnak içine alındığında, a'dan önce bile olsa, tam anlamıyla kullanılır '. Bir açılıştan sonra, bir 'sonraki 'her zaman kapanış teklifi olarak yorumlanır. 'Tek tırnaklı bir dizgede alıntı yapmak gibi bir şey alıntılamaya son vererek, 'tek tek kaçarak ve tekrar alıntı yapmaya başlayarak elde edilebilir . Yani, karakter \'açma ve kapatma arasında işe yaramazsa ', '\''yapar. (Bkz Gilles 'ın Aynı hatayı yapmış benim mesajların birine düzeltme detaylar için.)
Eliah Kagan

11

Bu, bash el kitabının ilgili bölümünde çok güzel bir şekilde açıklanmıştır . Kısaca, tek tırnak içindeki herhangi bir şey kelimenin tam anlamıyla yorumlanır. Yani, örneğin:

$ echo '$SHELL'
$SHELL
$ echo '{1..3}'
{1..3}

Bunu alıntılanmamış sürümlerle karşılaştırın:

$ echo $SHELL
/bin/bash
$ echo {1..3}
1 2 3

Çift tırnak, değişken genişlemeye izin verir (ayrıca tarih genişlemesi ve bazı diğer şeyler). Temel olarak, genişletilmiş görmek istediğiniz bir şeyle uğraşırken onları kullanırsınız. Örneğin:

$ echo "$SHELL"
/bin/bash
$ echo "!!"
echo "echo "$SHELL""
echo /bin/bash

Başka bir deyişle, tek tırnaklar bir dize kabuktan tamamen korurken, çift tırnaklar bazı şeyleri korur (örneğin boşluklar), ancak değişkenlerin ve özel karakterlerin doğru şekilde genişletilip / yorumlanmasına izin verir.


1
OP'nin gerçekte değiştirilip değiştirilmediğinden emin değilsiniz, ancak bu cevap backticks'ten bahsetmiyor mu?
Alexander Mills,

5

Tek tırnak ( ''), tırnak içine alınmış her karakterin değişmez değerini korumak için kullanılır.

İkili tırnak ( "") kullanılarak, dolar işareti ( $), geri dönüşler (geriye doğru tek tırnaklar ``) ve ters eğik çizgi ( \) hariç, tüm karakterlerin değişmez değeri korunur .

Geri dönüşlerin ( ``) içine alındığında , kabuk "geri dönüşlerin içindeki komutun çıktısı" anlamına gelen bir şeyi yorumlar. Komutun çıktısı, komutun kendisiyle ikame edildiğinden, buna "komut değiştirme" denir.

Referanslar:


3
echo '$HOME' is "$HOME"

Tek tırnaklar değişken genişlemeyi önlerken çift tırnaklar buna izin verir.


2

Sadece genel olarak konuşuyorum ama:

""- Çıktıktan önce içlerindeki bazı bilgileri işlemek için kullanılır. (PHP'deki gibi)

  • Örneğin: name=NESS; echo "Hello my name is $name"çıktı:Hello my name is NESS

''- Çıktıyı olduğu gibi göstermek için kullanılır. (PHP'de olduğu gibi)

  • Yukarıdaki örneği kullanarak çıktı alır. Hello my name is $name

Bu nedenle, çift ve tek tırnaklar arasındaki fark, çift tırnakların değişkeni işlemesi ve değeri göstermesidir; tek tırnaklar işlenmemiş değişkenin adını gösterir.

`` - Daha sonra başka bir değişkene atanan komutları alıntılamak için kullanılır.


1

Tek tırnak, tam anlamıyla alınması gereken bir değeri içerir: tüm genişleme türleri bastırılır. Genellikle değer içeriyorsa kullanılan veya boşluk (boşluk, sekme, yeni satır), veya özel karakter (içerebilir $, \, `kullanıcı / genişletilmiş kabuk tarafından özel olarak tedavi edilecek istemediği).

Çift tırnak, değişkenleri olacak bir değeri içerir ve karakter değişimi yapılır. Çıktı boşluk içerebiliyorsa ve tek bir değer olarak atanmalıdır.

Geri tırnak, sonuçları değer olarak istenen bir komutu içerir. Daha yeni kabuklar kullanımına izin $(...)yerine `...`. Yeni yöntemi tercih ederim.

Aşağıdaki kod, neler olduğunu anlamanıza yardımcı olabilir.

CMD = 'ls'
yankı sq: $ CMD
$ CMD'yi ayarla
yankı ham 1: $ 1
yankı ham: $ *
"$ CMD" olarak ayarlayın
echo dq: $ 1
echo bq: '$ CMD`
yankı yeni: $ ($ CMD)
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.