Boru hatları ile çok satırlı bir bash komutunda ayrı satırlarda okunabilir yorumlar?


14

Boru hatları kullanarak kabuk komut dosyaları oluştururken ve satırları devam ettirmek için ters eğik çizgi kullanırken, yorum eklemek istiyorum çizgiyi kullanırken , sağlam, okunabilir ve taşınabilir bir şekilde ayrı satırlara .

Örneğin, bu önerilmeyen çok satırlı komut verildiğinde (netliği için @DigitalRoss'tan çalındı):

echo abc |
     tr a-z A-Z |
     sort |
     uniq

... aşağıda estetik olarak başarmak istediğim şeye en yakın, ama bariz nedenlerle, çalışmıyor ... ve evet, bunun normal olarak yorumlamaya değer bir şey olmadığının farkındayım:

# Perform critical system task.
# NOTE - An example of what does *not* work.
echo abc |
    # Convert lowercase to uppercase.
     tr a-z A-Z |

     # Sort the results.
     sort |

     # Only show unique lines.
     uniq

Mevcut ilgili cevaplar aşağıdaki gibi benim için tatmin edici görünmüyor :

İlk, glenn jackman'ın cevabı (bir diziye argümanlar ekleyerek ve sonra diziyi yürütmek) tek komutlar için çalışır, ancak boru hattı için işe yaramaz (ve olsa bile, kaçınmak istediğim karmaşıklığı ekler).

İkincisi, @Gilles'ın buradaki cevabı (kullanan :) boru hattıyla da çalışmıyor gibi görünüyor, çünkü boru hattının akışını değiştiriyor:

$ echo "abc" | :
$

( NOT : :Çıkışı değiştirmeden geçiren bir eşdeğeri varsa , bu estetik olarak kabul edilebilir olurdu, ancak bir tane bulamadım. Özel bir tane yazabilirim, ancak taşınabilirliği azaltacaktır.)

Son olarak, DigitalRoss'un StackOverflow'daki cevabının son kısmı aynı hatta yorum eklemek için iyi çalışıyor, ancak ayrı satırlardaki yorumları kesinlikle tercih ediyorum. Aksi takdirde, çizgiler çok çeşitli uzunluklara sahip olduğunda, okunabilirlik azalır:

echo abc |         # normal comment OK here`
     /usr/local/bin/really/long/path/ridiculously-long-filename.sh |  # another normal comment OK here
     sort |        # the pipelines are automatically continued
     uniq          # final comment

Okunabilirliği koruyan ve karmaşıklığı en aza indiren cevaplar arıyorum, ya da aradığım şeyin neden mümkün olmadığı konusunda biraz arka plan arıyorum.


1
Yorumlarınız hakkında not: Bana bir bölümü veya iş birimini açıklayan yorumlar yazmam öğretildi. Deneyimli bir kodlayıcı ne yaptıklarını açıklayan akıllı yorumlar yazarsa, muhtemelen senaryoyu korumakla birlikte gelen herkes kullanım ayrıntılarını anlamadıysa her zaman man sayfalarını kullanabilir. Asla böyle bir yorum yazmamalısınız i++; // increment i by one. "Programlama Stilinin Öğeleri" ni
BSD

Sanırım son düzenlemeyi sileceğim. Bir sorunun soruyu, cevapların çürütülmesini ve cevabın kendisini içermesi alışılmadık bir durumdur, ancak diğer cevapların neden işe yaramadığını açıklayan kısım burada biraz gereklidir. rozcietrzewiacz'ın yanıtı ve yorumunuz birlikte sorunu açıklıyor (kişisel olarak ayrı bir cevap gönderirdim ve kabul ettim, çünkü sorun tanımladığı şeyden oldukça farklıydı, ancak bu işe yarıyor)
Michael Mrozek

Anlaşıldı - geri bildirim için teşekkürler; ders öğrenildi!
Royce Williams

Yanıtlar:


14

Buna ne dersin?

echo abc | \
# Convert lowercase to uppercase.
tr a-z A-Z | \

# Sort the results.
sort | \

# Only show unique lines.
uniq

(Ters eğik çizginin bu satırlardaki son karakter olarak kullanılması gerekir .) Bu yaklaşımın taşınabilirliğinden emin değilim, ama kesinlikle akımla çalışıyor bash.


Aha! (facepalm) Soruyu farketmeden gönderirken kullandığım deyimi değiştirdim! Boruyu her satırın başına koyuyordum, şimdi yapmayı bıraktığım için mutluyum, bu yöntemin hem bash hem de sh'de erişebildiğim tüm sistemlerde iyi çalıştığını biliyorum. Teşekkürler!
Royce Williams

Bu yorumlar satırın sürekliliğini bozmaz mı?
Stuart P. Bentley

Her yorumdan önce boş bir satır olduğu sürece iyi çalışır.
Royce Williams
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.