Komentar yang dapat dibaca pada baris terpisah dalam perintah bash multi-baris dengan saluran pipa?

14

Saat membuat skrip shell menggunakan jalur pipa, dan menggunakan garis miring terbalik untuk melanjutkan baris, saya ingin menyisipkan komentar pada baris terpisah , dengan cara yang kuat, mudah dibaca, dan portabel.

Misalnya, dengan perintah multi-line yang tidak diomentari ini (dicuri dari @DigitalRoss untuk kejelasannya):

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

... di bawah ini secara estetika paling dekat dengan apa yang ingin saya capai, tetapi karena alasan yang jelas, tidak berhasil ... dan ya, saya sadar bahwa ini bukan sesuatu yang biasanya layak dikomentari:

# 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

Jawaban terkait yang ada tampaknya tidak memuaskan bagi saya , sebagai berikut:

Pertama, jawaban glenn jackman (menambahkan argumen ke array, dan kemudian mengeksekusi array) bekerja untuk perintah tunggal, tetapi tidak berfungsi untuk pipelining (dan bahkan jika itu dilakukan, itu menambah kompleksitas yang ingin saya hindari).

Kedua, jawaban @Gilles 'di sini (yang menggunakan :) juga tampaknya tidak berfungsi dengan pipelining, karena itu mengubah aliran pipa:

$ echo "abc" | :
$

( CATATAN : Jika ada yang setara dengan: yang melewati keluaran yang tidak dimodifikasi, itu akan secara estetika dapat diterima, tetapi saya belum dapat menemukan satu. Saya dapat menulis yang khusus, tetapi itu akan mengurangi portabilitas.)

Akhirnya, bagian terakhir dari jawaban DigitalRoss pada StackOverflow berfungsi dengan baik untuk menambahkan komentar pada baris yang sama, tetapi saya sangat suka komentar pada baris yang berbeda. Jika tidak, ketika garis memiliki panjang yang sangat bervariasi, keterbacaan berkurang:

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

Saya mencari jawaban yang menjaga keterbacaan dan meminimalkan kompleksitas, atau latar belakang mengapa apa yang saya cari tidak mungkin.

Royce Williams
sumber
1
Catatan tentang komentar Anda: Saya diajari menulis komentar yang menjelaskan bagian atau unit kerja. Jika seorang pembuat kode yang berpengalaman menulis komentar cerdas yang menggambarkan apa yang mereka lakukan, maka mungkin orang yang datang dengan memelihara skrip selalu dapat menggunakan halaman manual jika mereka tidak memahami detail penggunaan. Seseorang seharusnya tidak pernah menulis komentar seperti i++; // increment i by one. Saya sarankan Anda membaca "Elemen Gaya Pemrograman"
bsd
Saya pikir saya akan menghapus suntingan terakhir. Suatu pertanyaan yang tidak lazim mengandung pertanyaan, penolakan jawaban, dan jawaban itu sendiri, tetapi bagian yang menjelaskan mengapa jawaban lain tidak berfungsi adalah perlu di sini. Jawaban rozcietrzewiacz dan komentar Anda bersama-sama menjelaskan masalahnya (secara pribadi saya akan memposting jawaban terpisah dan menerimanya, karena masalahnya cukup berbeda dari apa yang ia jelaskan, tetapi ini berhasil)
Michael Mrozek
Dipahami - terima kasih atas umpan baliknya; pelajaran yang dipetik!
Royce Williams

Jawaban:

14

Bagaimana dengan ini?

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

# Sort the results.
sort | \

# Only show unique lines.
uniq

(Garis miring terbalik harus digunakan sebagai karakter terakhir dalam baris tersebut.) Saya tidak yakin tentang portabilitas dari pendekatan itu, tetapi itu pasti bekerja dengan baik saat ini bash.

rozcietrzewiacz
sumber
Aha! (facepalm) Saya mengubah idiom yang sebenarnya saya gunakan ketika memposting pertanyaan tanpa menyadarinya! Saya meletakkan pipa di awal setiap baris, yang saya senang berhenti lakukan sekarang karena saya tahu bahwa metode ini bekerja dengan baik pada semua sistem yang dapat saya jangkau, baik dalam bash dan sh. Terima kasih!
Royce Williams
Bukankah komentar itu merusak kelanjutan garis?
Stuart P. Bentley
Selama ada baris kosong sebelum setiap komentar, itu berfungsi dengan baik.
Royce Williams