Bagaimana saya bisa mengomentari setiap baris dari baris berikut dari skrip?
cat ${MYSQLDUMP} | \
sed '1d' | \
tr ",;" "\n" | \
sed -e 's/[asbi]:[0-9]*[:]*//g' -e '/^[{}]/d' -e 's/""//g' -e '/^"{/d' | \
sed -n -e '/^"/p' -e '/^print_value$/,/^option_id$/p' | \
sed -e '/^option_id/d' -e '/^print_value/d' -e 's/^"\(.*\)"$/\1/' | \
tr "\n" "," | \
sed -e 's/,\([0-9]*-[0-9]*-[0-9]*\)/\n\1/g' -e 's/,$//' | \
sed -e 's/^/"/g' -e 's/$/"/g' -e 's/,/","/g' >> ${CSV}
Jika saya mencoba dan menambahkan komentar seperti:
cat ${MYSQLDUMP} | \ # Output MYSQLDUMP File
Saya mendapat:
#: not found
Apakah mungkin berkomentar di sini?
Jawaban:
Ini akan memiliki beberapa overhead, tetapi secara teknis itu menjawab pertanyaan Anda:
Dan untuk jaringan pipa secara khusus, ada solusi bersih tanpa overhead:
Lihat pertanyaan Stack Overflow Cara Meletakkan Komentar Baris untuk Perintah Multi-baris .
sumber
Trailing backslash harus menjadi karakter terakhir pada baris untuk ditafsirkan sebagai perintah lanjutan. Tidak ada komentar atau bahkan spasi putih diizinkan setelah itu.
Anda harus bisa meletakkan baris komentar di antara perintah Anda
sumber
|
. Jika Anda mencobacat file1\<newline>#comment<newline>file2
, Anda akan melihat bahwa Anda tidak mendapatkannyacat file1 file2
, tetapi sebaliknyacat file1; file2
.cat file1 | # comment<newline>sort
berfungsi dengan baik. Begitu jugacat file1 && # comment<newline>echo foo
. Jadi komentar dapat dimasukkan setelah|
atau&&
atau||
, tetapi tidak setelah `\` atau di tengah perintah.Seperti yang ditunjukkan DigitalRoss, garis miring terbalik tidak perlu ketika garis berakhir
|
. Dan Anda dapat memberi komentar pada baris berikut|
:sumber
Backslash lolos dari #, menafsirkannya sebagai karakter literalnya dan bukan karakter komentar.
sumber
$IFS
komentar peretasanPeretasan ini menggunakan ekspansi parameter aktif
$IFS
, yang digunakan untuk memisahkan kata dalam perintah:Demikian pula:
Dengan ini, Anda dapat memberi komentar pada baris perintah dengan lanjutan:
tetapi komentar harus sebelum
\
kelanjutan.Perhatikan bahwa ekspansi parameter dilakukan di dalam komentar:
Pengecualian yang jarang
Satu-satunya kasus langka yang gagal adalah jika
$IFS
sebelumnya dimulai dengan teks persis yang dihapus melalui ekspansi (yaitu, setelah#
karakter):Catatan final
foobar
tidak memiliki ruang, menggambarkan masalah ini.Karena
$IFS
hanya berisi ruang kosong secara default, sangat tidak mungkin Anda akan mengalami masalah ini.Kredit untuk komentar @ PJH ini yang memicu jawaban ini.
sumber
Selain contoh oleh DigitalRoss, berikut adalah formulir lain yang dapat Anda gunakan jika Anda lebih suka
$()
backticks`
Tentu saja, Anda dapat menggunakan sintaks titik dua dengan backtick juga:
catatan tambahan
Alasannya
$(#comment)
tidak bekerja adalah karena setelah melihat#
, memperlakukan sisa garis sebagai komentar, termasuk kurung penutup:comment)
. Jadi tanda kurung tidak pernah ditutup.Backticks mem-parsing secara berbeda dan akan mendeteksi backtick penutup bahkan setelah a
#
.sumber
Berikut ini adalah skrip bash yang menggabungkan ide dan idiom dari beberapa komentar sebelumnya untuk memberikan, dengan contoh, komentar inline yang memiliki bentuk umum
${__+ <comment text>}
.Khususnya
<comment text>
bisa multi-line<comment text>
tidak diperluas parameterAda satu batasan pada
<comment text>
, yaitu, kawat gigi'}'
dan tanda kurung yang tidak seimbang')'
harus dilindungi (yaitu,'\}'
dan'\)'
).Ada satu persyaratan pada lingkungan bash lokal:
__
harus tidak disetelNama parameter bash lainnya yang valid secara sintaksis akan menggantikannya
__
, asalkan nama tersebut tidak memiliki nilai yang ditetapkan.Contoh skrip berikut
sumber