Soru Linux Bash Syntax: &&, \, ve Anlamı


Ne var&&','\' ve '-'bash komutlarının sonunda demek?

Özellikle, Ubuntu'nun yetenek paketi yöneticisine ortak anahtarlar eklemesi gereken aşağıdaki satır kombinasyonunu karşılıyorum, bu karakterler burada ne için kullanılıyor?

    gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \
    gpg - dışa aktarma - ürün 26C2E075 | sudo apt-key eklentisi - && \
    sudo apt-get güncelleştirmesi

13
2017-08-13 05:54


Menşei


"/", "\" ile aynı değil - Thomas
Thomas: Mesajı düzeltti - Kyle Brandt♦
Burada ters eğik çizgi gerekli değildir, çünkü && da satır devamını ima etmek için yeterli olacaktır. Ters eğik çizgi kullanarak, okunabilirlik yardımcı olur. - Dennis Williamson


Cevaplar:


"&&" komutları birbirine zincirlemek için kullanılır, böylece bir sonraki komut, yalnızca önceki komut hatasız olarak çıkarsa (veya daha doğrusu, 0 döndürme koduyla çıkarsa) çalışır.

"\" Bir satırın sonunda kendi başına çizgileri birleştirmenin bir aracıdır. Yani aşağıdaki iki satır:

gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \
gpg --export --armor 26C2E075

satır tek satır olarak yazılmışsa tam olarak aynı şekilde işlenir:

gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && gpg --export --armor 26C2E075

"-" belirli bir bash işlevi olmayan bir komut satırı argümanıdır. Tam olarak nasıl ele alınacağı, çalıştırılmakta olan komuta bağlıdır (bu durumda apt-key). İçeriğe bağlı olarak, genellikle "ya belirtmek için kullanılır"bir dosyadan ziyade stdin'den veri oku"veya"satırın kalanını komut satırı argümanları yerine veri olarak işlemek".


32
2017-08-13 06:06



Bu durumda, '-' sudo'nun bir parametresi değil, 'apt-key', yani bir anahtar dosya yerine 'apt-key', borudan ('|') gelen bilginin stdin'inde kullanıldığı anlamına gelir. bir anahtar olarak. '--Putput a_file_name.key' seçeneğine sahip olmadan "gpg --export" seçeneği, gpg stdout'undan yeni bir anahtarı ('|') 'apt-key' stdinine aktarır. ) - edomaur
hoppala. Bu, yarı uyurken soruları cevaplamak için aldığım şey. sabit. - goldPseudo


&& == if the first command succeeded, run the next one
\ == the next line is part of the first line, not two seperate lines
- == read the input from stdin (console)

6
2017-08-13 06:00





&& Mantıksal AND:
&& ifade etmenin bir yoludur Mantıksal VEtüm ifadenin anlamı, her iki tarafı da doğruysa, doğrudur. Mantıkta, söylenir ki tüm deyim (P & Q) yalnızca P ve Q'nun her ikisi de doğru olduğunda geçerlidir.

Bunun bir sonucu olarak, bilgisayarlar genellikle P & Q’yu kısa devre değerlendirmesi. Dolayısıyla, tüm ifade hem P hem de Q doğruysa, Doğru olacaktır. eğer P yanlış ise, Q ifadesi değerlendirilmez.. Temelde bilgisayarlar tembeldir (verimli) ve eğer Q'ları yoksa da Q'yu değerlendirmekten çekinmezler. Bu ayrıca mantıksal VEYA doğrudur, önceki bağlantıya bakın.

Bash’in Üç Bağlamı:

1) Kısa Devre Değerlendirmesini bir Komuta'nın çıkış durumu ile kullanma:
Her komutun bir çıkış durumu vardır. Bir komutun bir hatası varsa, sıfır olmayan bir çıkış durumu vardır. Yani çıkış durumu sıfır değilse ve komutlar birlikte bir deyime zincirleme için kullanılırsa, daha önceki komutların çıkış durumu 0 (Doğru) değilse, daha sonraki komutlar değerlendirilmez (yürütülür). Bunun nedeni kısa devre değerlendirmesidir. Eğer varsa:

P && Q

Eğer P doğru değilse Q idam edilmeyecektir (eğer P, 0'dan başka bir durumla çıkarsa, bu doğru değildir). Sadece aynı:

./configure && make

Yapılandırma bir hata oluştuğunda yapılmayacak, doğru değildi. Öyleyse, temelde, o zaman ifadede yazmanın bir yolu olarak biter:

if ./configure ; then
   make
fi

Çoğu bağlamda 0'ın yanlış olduğunu, ancak bir çıkış durumuna geldiğinde aklınızda bulundurun.

2) && Bash'ın [[]] test komutunda yerleşik olarak kullanılabilir:
 

&& Aynı zamanda, komutları birleştiren benzer bir şekilde ifadeleri birleştirmek için bash [[]] 'da yerleşik test komutunun içinde de kullanılabilir. Tüm test işlemi sadece && 'nin hem işlenenleri (tarafları) doğruysa geçerli olacaktır, örneğin:

if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ... 

$ a, 2 ile 5 arasında bir tam sayı ise (2 ve 5 dahil değil) bir yol olurdu.

3) Aritmetik Değerlendirme:

Son olarak, && aritmetik değerlendirmede Mantıksal AND olarak kullanılabilir. Eğer her ikisi de Aşağıdaki sayıların (mantıksal AND) sıfır olmayan, 0 döndürür, başka 1 döndürülür:

kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0

6
2017-08-13 11:48



@Kyle: && mantıksal ifadenin dışında kullanılan "AND kontrol operatörü", benzer davranış ama teknik olarak farklı - drAlberT
Yorumunuzu takip etme, mantıksal bir ifadenin dışında ne demek istiyorsunuz? - Kyle Brandt♦
Yani, bir ifadede && kontrol operatörü "mantıksal" ve "ortalama" kelimelerini varsayar, aksi halde sadece bir "ve" dir. Listelerde kullanılan "VE kontrol operatörü" dir. Mantıksal operatörler, ifadeler içinde aritmetik genişleme bağlamında kullanılır. - drAlberT
içinde if [./configure] örneğin, parantezleri çıkarmalısınız. Doğru if ./configure; then make... - Juliano
Juliano, iyi yakalama, güncellenecek. AlberT, man sayfalarının verdiği terimlerden başka bir fark var mı? - Kyle Brandt♦


Bence "gerçek" anlamın bir açıklamasıyla daha iyi olacaksın, imalar başka bir şeydir :)

  • && "VE" kontrol operatörüdür. itibaren Bash Adam:
    Kontrol operatörleri && ve || sırasıyla AND listelerini ve OR listelerini belirtir.
    Bir AND listesi formu var
        command1 && komutu2
    Komut2, eğer sadece komut1 sıfırdan bir çıkış durumu döndürürse çalıştırılır.
    [..kesmek..]
    AND ve OR listelerinin dönüş durumu, son komutun çıkış durumudur.
    listede yürütülür.
    
    bir kontrol operatörü olduğu
    Bir kontrol işlevi gerçekleştiren bir belirteç. Aşağıdaki sembollerden biridir:
        || & &&; ;; () |
    
  • \ "kaçış karakteri"ve bash’ta mevcut üç alıntı mekanizmasından biridir:
    ALINTI YAPMAK
       Teklif, belirli karakterlerin veya kelimelerin kabuğa özel anlamını kaldırmak için kullanılır.
    [..kesmek..]
       Üç alıntı mekanizması vardır: kaçış karakteri, tek tırnak ve çift tırnak.
       Aktarılmayan bir ters eğik çizgi (\) kaçış karakteridir. Aşağıdaki istisnalar dışında, bir sonraki karakterin değişmez değerini korur. Bir \ çifti görünürse ve ters eğik çizgi kendini göstermezse, \ bir satır devamı olarak kabul edilir (yani, giriş akışından kaldırılır ve etkin bir şekilde yok sayılır).
    [..kesmek..]
    Ters eğik çizgi özel karakterini yalnızca şu karakterlerden biri izlediğinde korur: $, `,", \, or.
    
    Bu, bir satırın sonuna bir kaçış karakteri ("\") koyarsanız aslında yeni hat char kaçan hemen onu takip eder (RETURN karakter) böylece "çizgiyi devam ettir" etkisine sahipler, diğerleri cevaplarında zaten açıklamışlardır
  • Çizgi char "-"Bazı komutlar parametre olarak kabul edilir, bir kabuk özel char veya operatör değil, bir kuraldır. Diğer belirtildiği gibi, standart I / O akışları için bir tür yer belirleyici. Programa bağlı olarak stdin (standart giriş) veya stdout (standart çıktı) için kalabileceğine işaret ediyoruz.

2 sentim


3
2017-08-13 08:52



Muhtemelen bir vaka olacak dr. Bir mankenin dev parçalarını yapıştırmak - olduğu gibi aydınlatıcı - muhtemelen sadece OP'yi sindirecektir. - rodjek
@rodjek, kararlaştırıldı ve düzeltildi. Teşekkürler - drAlberT