“[[$ -! = * i *]] &&” dönüşü ne demektir?

20

Bu satırı .bashrc değerinde aldım ve bunun tam olarak ne anlama geldiğini bilmek istiyorum

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
    
sordu Severus Tux 24.09.2016 15:18

3 cevap

32
  • $- 'geçerli bayraklar' anlamına gelir.
  • echo $- "himBH" değerini döndürür. Bunların hepsi varsayılan.
  • öyleyse ... [[ $- != *i* ]] && return aslında bir yorumda yukarıda yazdığı şeyi yapar: etkileşimli bayrağın ayarlanıp ayarlanmadığını kontrol eder. [[Ve]] onu bir "boolean" yapar, böylece "gerçek" veya "yanlış" olarak biter. "false & amp; & return", "true & amp; & return; geri dönüş" ifadesinin devam etmesini sağlar ve geri dönüşü gerçekleştirir.

Varsayılan bayraklar daha ayrıntılı olarak açıklandı:

h, "hash all" için: bu, PATH'ınızı sorgulayarak bulduğu komutların yerlerini hatırlamak için bash söyler.

i "etkileşimli" içindir: giriş & amp; çıktı almak.

m "monitör" içindir: bu, iş kontrolünü sağlar

B, "brace expand" içindir. Bu, brace genişlemesini kullanmanızı sağlar

H, "tarih genişlemesi" içindir. Bu, numaranızı bir ünlem işareti ile önleyerek geçmişinizden bir komutu yeniden çalıştırmanızı sağlar.

Bu arada. Benim ...

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Temel olarak aynı şeyi yapar ama daha kolay okurum.

    
verilen cevap Rinzwind 24.09.2016 15:32
6

Temel olarak "Kabuk bayrakları küçük harf içermiyorsa, burada işlevi / komut dosyasını burada durdurun".

[[ ]]

, bash'ta koşullu bir ifadeyi ifade eder

$-

kabuk bayrakları anlamına gelir. Kabuk etkileşimli ise "i" ifadesini içerecektir (yani, komutları yürütmek yerine, komut dosyası yürütebilirsiniz)

!=

"eşit değil" anlamına gelir.

*i*

, "i" içeren bir şeyle eşleşen bir joker karakterdir

return

herhangi bir argüman olmadan sadece geçerli fonksiyonun veya komut dosyasının yürütülmesini durdurur.

&&

mantıksal AND operatördür. Sağdaki ifade, bu durumda return , yalnızca soldaki ifade true ise değerlendirilir (yürütülür). Pek çok programlama dilinde a && b , if a then b için kısa yoldur - buna "kısa devre değerlendirmesi" denir ve programlama öğretmenlerini kullandığınızda çıldırır: D

    
verilen cevap delt 27.09.2016 19:34
2

Şöyle yazdığını varsayalım: eğer bir interaktif kabukta bash değilse, o zaman hiçbir şey yapmayın.

Tüm işlevi bilmiyorum, ancak muhtemelen bir TTY içinde açık bir açıklık olması durumunda bu satırın altında komutlar ve bayraklar var.

    
verilen cevap TheWanderer 24.09.2016 15:20

Etiketlerdeki diğer soruları oku