Bash satırında && ve || belgelenmiş?


28

Bu yapıyı senaryolarda çok gördüm ve kendim kullandım, ancak dokümantasyonda bulamadığımı rahatsız ediyor beni.

Örnek:

[ -f file1 ] &&
[ -f file2 ] &&
echo "Both files exist." ||
echo "One or the other file doesn't exist."

Bu, aşağıdaki gibi, newlines'tan önce ters eğik çizgi ile de yapılabilir man bash:

If a \<newline> pair appears,  and  the  backslash  is  not
itself  quoted,  the \<newline> is treated as a line continuation (that
is, it is removed from the input stream and effectively ignored).

Örnek:

[ -f file1 ] && \
[ -f file2 ] && \
echo "Both files exist." || \
echo "One or the other file doesn't exist."

... ama bu gerekli görünmüyor. Yukarıdaki ilk sürüm ters eğik çizgi olmadan bile çalışır.

Bunu nerede bulabilirim man bash? (Ayrıca, bu bashbelirli mi yoksa POSIX uyumlu mu?)


Resmi bash veya POSIX belgelerini arıyorsanız, Gilles'in cevabına bakınız. Ancak bu, kabuğun kontrol ve yönlendirme operatörleri nelerdir? - Daha gözlemler ;, &, (ve) .
G-Man

@ G-Man, sanırım bu bana yönelik değildi? Sadece gelecekteki okuyucular için mi? Soruda söylediğim gibi, "onu belgelerde bulamamış olmam beni rahatsız ediyor." Nasıl çalıştığını zaten biliyordum, bu yüzden bu sadece resmi belgeler için bir talepti. :)
Wildcard

Hatta diziler durumunda, örtük bir satır devam vardır: names=( Rama Soma<newline> Sita Diya ). Python bunları burada açıkça açıklar ancak Bash belgelerine görünmüyor.
jamadagni

Yanıtlar:


39

Kesin olarak sonlandırılmamış bir komutun bulunduğu birkaç bağlamda yeni bir satır yoksayılır. Bu içerikler, bir kontrol operatörü sonra içerir ( &&, ||, |, &, ;, ;;, ama !).

Bunu bash el kitabında belgelenmiş görmüyorum.

POSIX’de dilbilgisi kuralları ile belirtilir . Kuralların olduğu her yerde, linebreaksıfır veya daha fazla satır sonları olabilir.


+1, basit boru için | | çalıştığını bilmiyordum. Okunabilmeleri için onları bir sonraki satıra yerleştirebilmeyi isterdim, ancak bu şekilde çalışmaz (eğer bunu yaparsanız, önceki yeni çizgiyi aşmanız gerekir).
Olivier Dulac

1
@OlivierDulac Bu nasıl işe yarayabilir? Geçerli komut satırını işlerken |, bir sonraki satırın başında yazmayı planladığınızı nasıl bilebilir ? Unutmayın, kabuk yalnızca komut dosyalarında değil etkileşimli olarak kullanılır ve dilbilgisi aynıdır.
Barmar

@Barmar: Biliyorum, bunu biliyorum (okulda derleyiciler yazdı ^^) ... "Keşke" dedim ve bu çok makul bir dilek değil
Olivier Dulac

1
@DocSalvager, önlemeye yardımcı olacak bir mantıksal hata örneği verebilir misiniz?
Wildcard

2
@DocSalvager, yazdığım gibi aslında kodu kullanmazdım - bir örnek oldu. Son satır olmasaydı (aksi halde) Yine de bu şekilde kullanırdım. ("Eğer bu ve o zaman bunu yapın" this && this2 && thatiçin sorun yok ama bir elsecümle için gerçek bir madde kullanırdım if then else fi.)
Wildcard
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.