“[[$ -! = * İ *]] && return” ne anlama geliyor?


22

İçimde bu çizgi var .bashrcve bunun tam olarak ne anlama geldiğini bilmek istiyorum

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

Yanıtlar:


33
  • $- 'mevcut bayraklar' anlamına gelir.
  • echo $-"himBH" döndürür. Bunların hepsi varsayılan.
  • yani ... [[ $- != *i* ]] && returnaslında bir yorumda yukarıda yazdığı şeyi yapar: etkileşimli bayrağın ayarlanıp ayarlanmadığını kontrol eder. [[Ve]] onu bir boole yapar, böylece “doğru” ya da “yanlış” olarak sonuçlanır. "false && return" devam etmesini sağlar "true && return" dönüşü gerçekleştirir.

Varsayılan bayraklar daha ayrıntılı olarak açıklanmıştır:

h, "hash all" içindir: bash'a PATH'nizi sorgularken bulduğu komutların konumlarını hatırlamasını söyler.

i "etkileşimli" içindir: girdi girme ve çıktı geri alma.

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

B "ayraç genişletme" içindir. Bu, ayraç genişletme kullanmanıza izin verir

H "tarih genişletme" içindir. Bu, sayınızı bir ünlem işaretiyle önyükleyerek geçmişinizden bir komutu yeniden çalıştırmanıza olanak sağlayan şeydir.


Bu arada. Sahibim ...

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

Temelde aynısını yapar ama okumayı daha kolay sanırım.


6

Temel olarak, "Kabuk bayrakları küçük harf i içermiyorsa, işlevi / betiği burada durdurun" anlamına gelir.

[[ ]]

bash içindeki koşullu bir ifadeyi belirtir

$-

Kabuk bayrakları anlamına gelir. Kabuk etkileşimli ise "i" yi içerecektir (yani komutları yazabilirsiniz, aksine bir betiği çalıştırıyor).

!=

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

*i*

"i" içeren herhangi birşeyle eşleşen bir joker

return

Herhangi bir argüman olmadan sadece geçerli fonksiyonun veya betiğin çalışmasını durdurmak anlamına gelir.

&&

mantıksal AND işlecidir. Sağdaki ifade, bu durumda return, yalnızca soldaki ifade doğru ise değerlendirilir (yürütülür) . Pek çok programlama dilinde, a && bbunun için bir yol var if a then b- buna "kısa devre değerlendirmesi" denir ve kullandığınızda programlama öğretmenlerini çılgına çevirir: D


2

Söylediği gibi varsayabiliriz: bash etkileşimli bir kabukta açık değilse, o zaman hiçbir şey yapmayın.

Tüm işlevi bilmiyorum, ancak muhtemelen bir TTY'de bash açmanız durumunda, bu satırın altında ayarlanmış komutlar ve bayraklar vardır.


teşekkürler :) ama tam olarak ne olduğunu $-ve *i*etkileşimli modun olup olmadığını nasıl bulacağını bilmek için sabırsızlanıyorum
Severus Tux

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.