“O zaman” yerine parantez koymak mümkün mü?


10

İlk önce bir Cdilde kod yazmayı ve

if ( code )
then 
code
fi

kodumu okumamı gerçekten zorlaştırıyor (nedenini sorma). Bunun yerine geçecek bir şey var mı then?

Bunun gibi bir şey:

if ( code ) {
 code
}
fi

Aşağıdaki cevaplar yardımcı olabilir, ancak ekleyebilirsem, farklı dillerin sözdizimine alışmak çok iyi bir fikirdir. Yazılım geliştirmede iş bulmak veya bu konuda adanmış veya sistem yöneticisi olarak çalışmak istiyorsanız, birçok farklı sözdizimini tanımayı ve kullanmayı öğrenmeniz gerekecektir. Mümkün olduğunca esnek olarak herhangi bir işveren için daha değerli olacaksınız.
OldTimer

Yanıtlar:


21

Bunun yerine bir şey yoktur, ancak gerçekten parantezlere ihtiyacınız varsa her ikisini de kullanabilirsiniz:

if true ; then {
    something
} fi

Bu , bloğun gövdesi olarak gereksiz yere açıkça desteklenmiş bir komut grubu kullanır then. Diş telleri içindeki tüm komutlar then, tam olarak diş telleri yokmuş gibi , çalışır durumdayken geçerli kabukta yürütülür .

Bu stili genel olarak veya başka birinin okuması gereken kod için gerçekten tavsiye etmem, ancak istediğiniz parantezleri verir ve parantez blokları gerektiren bir düzenleyici kullanıyorsanız hile yapar veya bunun gibi bir şey.


İşte "tavsiye etmeye değmez" bir başka - parantez galore: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- temel olarak, bashyeterince kullandığınızda , standart sözdizimi yeterince tanıdık olur, bu yüzden çok fazla bir sorun değildir.
Peter.O

15

Sen arayan gibi görünüyor C kabuğu ( csh, tcsh, vs ...). Unutmayın uzmanlar programlama için buna karşı tavsiye .

Zevksiz olduğunu düşündüğünüz kısmın thenaşağıdaki satırdaki gerçeği olup olmadığından emin değilim ? Öyleyse, aşağıdaki stili kullanmayı düşünün:

if condition; then
    stuff
fi

Geri geri gibi bu yazım ifadesi isimleri itiraf etmeliyim fiiçin ifve esaciçin case(ancak elihwiçin whilenazik Acayip taşımaktadır!). Ama bu, kullanabileceğiniz en taşınabilir kabuk sözdizimi olan standart Bourne kabuğu.


Cevabınız için teşekkürler - thenZevksiz bulamıyorum, sadece editörüm ilgili {}çiftleri vurgulayacaktır ve bu bir tür hataya sahip olduğum zaman için yararlıdır, çünkü o zaman tüm ififadelerimi kolayca görebilir ve bir şeylerin yanlış gittiğini görebilirim .
人 的 ​​人

1
Ah evet. Bu artı vi'in %eşleşen ayracı / parantez / dirseğe atlar komut. Sempati duyuyorum. Özlediğim vi'ın %Python programlarken komutu.
Celada

8
Matchit vim eklentisini denediniz mi? Bash içinde if / fi ve diğer birçok dilde bir çok blok için% atlama özelliğini destekler. Buraya bakın - vim.org/scripts/script.php?script_id=39
amisax

@AmitKumar bahşiş için teşekkürler. Bir göz atacağım!
Celada

9

Belki bu gözlerde daha kolaydır:

[ condition ] && {
   # statement 1
   # statment 2
   # ...
}

Bunun dışında sadece alış. Dilin deyimlerini kullanın.


1
Ancak genellikle gereksiz bashizmi kaybedin ve sadece bir set parantez kullanın.
Josip Rodin

5

Aşağıdakiler oraya yakın. Ve garip.

: if; { code; } && {
    code
}

Şahsen ben hiç sevdim ...

if true; then
more;fi

... kendimi şekillendiriyorum. Kontrol sözler hoşuma kurşun . Hakim ...;thenformun ortaya çıkması bana her zaman garip geldi.

if    this && that
then  do these things too
else  i will probably get upset
fi

Talebinizin neredeyse tamamen tersi, ancak bunu yapmanın başka bir yolu. İstediğiniz yönlendirmeleri fihatta gerektiği gibi yapıştırabilirsiniz ve bunlar tüm bloğa uygulanır.


Bu hakim biçim, ortak bir başka enkarnasyon gibi görünmektedir if(...) {, yani açılış ayrağını ifC benzeri dillerde aynı satırda bırakmak .
Ruslan

@Ruslan - Belki - ama çizgi aslında C'de hiçbir fark yaratmıyor, değil mi?
mikeserv

Doğru, ama satır sonu da kabukta bir fark yaratmıyor, değil mi? Sonraki noktalı virgül if, bir sonraki satırda bile yorumlayıcıyı komutun devamı için arar .
Ruslan

@Ruslan - evet - ;bu durumda sınırlamayı kullanmalısınız . Bu yüzden yapıyorlar.
mikeserv

:Kabuk yerleşkesini bu şekilde kullanarak, bir kod satırı C sözdizimine daha yakın olabilir, hiçbir şekilde teşvik edilmemelidir.
Josip Rodin

0

İşte bir yol:

[ "$var" = "find" ] && echo "found"

şuna eşittir:

if [ "$var" = "find" ]; then
  echo "found"
fi

Soruda belirttiği gibi, parantez istiyor . Birazını {...}etrafına koy echo "found"ve doğru yöne doğru ilerleyeceksin.
Peter.O

-2

Her zaman kullanıyorum:

if (code); then
   code;
fi

Muhtemelen tam olarak ne istediğinizi değil ama biraz daha c gibi.


2
Bu, alt kabuğa neden olarak performansı düşürür.
Will
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.