Có cách nào đơn giản để nhận xét một khối mã trong tập lệnh shell không?
Có cách nào đơn giản để nhận xét một khối mã trong tập lệnh shell không?
Câu trả lời:
Trong bash:
#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment
Ví dụ '
và '
xung quanh END
dấu phân cách là quan trọng, nếu không, những thứ bên trong khối như ví dụ $(command)
sẽ được phân tích cú pháp và thực thi.
EOF
là một ví dụ cổ điển (và do đó là !
, một dấu chấm than trên riêng của mình), nhưng bạn có thể sử dụng SNURFLE_BURGERS
hoặc classical_end_marker
hoặc bất kỳ từ nào khác mà không xuất hiện trên một dòng trên riêng của mình trong các tài liệu nhận xét-out. Tôi không muốn thử nghiệm các không gian, v.v., nhưng từ này cũng có thể hoạt động với chúng.
:
) không đọc đầu vào của nó và luôn thoát với giá trị thành công và gửi "nhận xét" làm đầu vào. Không nhiều lắm
Không có bình luận khối trên kịch bản shell.
Sử dụng vi
(có, vi
) bạn có thể dễ dàng nhận xét từ dòng n đến m
<ESC>
:10,100s/^/#/
(đọc, từ dòng 10 đến 100 bắt đầu dòng thay thế (^) bằng dấu #.)
và bỏ bình luận với
<ESC>
:10,100s/^#//
(đọc, từ dòng 10 đến 100 bắt đầu dòng thay thế (^) theo sau là # với ghi chú //.)
vi
là gần như phổ quát bất cứ nơi nào có /bin/sh
.
|noh
vào cuối. Các ống phân tách các lệnh bổ sung và noh
là cho nohighlight. Làm nổi bật cụm từ tìm kiếm sẽ tự động tiếp tục trong lần tiếp theo bạn tìm kiếm thứ gì đó. Ví dụ::10,100s/^/#/g|noh
<SHIFT>+G 10 <ENTER>
sau đó 0
hoặc bằng bất kỳ cách nào khác để điều hướng). Sau đó sử dụng <CTRL>+V
để vào chế độ khối trực quan và tô sáng phần đầu của tất cả các dòng bạn muốn nhận xét (trong ví dụ này 90 J
). Sau đó nhấn SHIFT+I
để chèn trước khối được tô sáng. Nhập dấu hiệu nhận xét (ví dụ #
) và nhấn <ESC>
để hoàn thành tiền tố của bạn. Lời giải thích này nghe có vẻ siêu dài, nhưng theo kinh nghiệm của tôi thì nó nhanh hơn nhiều trong thực tế.
Bạn có thể dùng:
if [ 1 -eq 0 ]; then
echo "The code that you want commented out goes here."
echo "This echo statement will not be called."
fi
if [ ];
cũng hoạt động.
if false;
. stackoverflow.com/a/18019516/2097284
Sau đây nên làm việc cho sh
, bash
, ksh
và zsh
.
Các khối mã được nhận xét có thể được đặt bên trong BEGINCOMMENT
và ENDCOMMENT
:
[ -z $BASH ] || shopt -s expand_aliases
alias BEGINCOMMENT="if [ ]; then"
alias ENDCOMMENT="fi"
BEGINCOMMENT
echo "This line appears in a commented block"
echo "And this one too!"
ENDCOMMENT
echo "This is outside the commented block"
Thực thi mã trên sẽ dẫn đến:
This is outside the commented block
Để bỏ ghi chú các khối mã do đó đã nhận xét, hãy nói
alias BEGINCOMMENT="if : ; then"
thay vì
alias BEGINCOMMENT="if [ ]; then"
trong ví dụ trên.
nếu bạn có thể né tránh các trích dẫn duy nhất:
__='
blah blah comment.
'
Sử dụng : '
để mở và'
đóng.
Ví dụ:
: '
This is a
very neat comment
in bash
'
Đây là từ ví dụ của Vegas được tìm thấy ở đây
Trong Vim:
shift-V
(vào chế độ trực quan), lên xuống các dòng tô sáng trong khối:s/^/#/
lệnh sẽ trông như thế này:
:'<,'>s/^/#
Nhấn Enter
ví dụ
shift-V
jjj
:s/^/#
<enter>
:s/^#/
Bạn có thể sử dụng chế độ Visual Block của Vi / Vim được thiết kế cho những thứ như thế này:
Ctrl-V
Highlight first element in rows you want commented
Shift-i
#
esc
Sự thiếu sót sẽ là:
Ctrl-V
Highlight #'s
d
l
Đây là cách tương tác của vi để thực hiện loại việc này thay vì đếm hoặc đọc số dòng.
Cuối cùng, trong Gvim, bạn sử dụng ctrl-q để vào chế độ Visual Block thay vì ctrl-v (vì đó là lối tắt để dán).
Thành thật mà nói, tại sao quá nhiều ...
Tôi coi đó thực sự là một cách thực hành tồi để viết mã hoạt động để tạo mã thụ động.
Giải pháp của tôi: hầu hết các biên tập viên đều có chế độ chọn khối. Chỉ cần sử dụng nó để thêm # vào tất cả các dòng bạn muốn nhận xét. Chuyện lớn là gì ...
Ví dụ về Notepad:
Để tạo: Alt - mousedrag xuống, nhấn #.
Để xóa: Alt-mousedrag xuống, mũi tên sang phải, xóa.
Một biến thể của thủ thuật here-doc trong câu trả lời được chấp nhận bởi sunny256 là sử dụng các từ khóa Perl để bình luận. Nếu bình luận của bạn thực sự là một loại tài liệu, thì bạn có thể bắt đầu sử dụng cú pháp Perl bên trong khối nhận xét, cho phép bạn in nó ra được định dạng độc đáo, chuyển đổi nó thành trang man, v.v.
Đối với vỏ có liên quan, bạn chỉ cần thay thế 'END'
bằng '=cut'
.
echo "before comment"
: <<'=cut'
=pod
=head1 NAME
podtest.sh - Example shell script with embedded POD documentation
etc.
=cut
echo "after comment"
(Tìm thấy trên " Tài liệu nhúng trong tập lệnh shell ")
Một chế độ khác là: Nếu trình soạn thảo của bạn KHÔNG có tùy chọn nhận xét BLOCK,
LÀM XONG
nó hoạt động với bất kỳ biên tập viên
Tôi thích một dòng duy nhất mở và đóng:
if [ ]; then ##
...
...
fi; ##
'##' giúp tôi dễ dàng tìm thấy điểm bắt đầu và kết thúc của nhận xét khối. Tôi có thể dính một số sau '##' nếu tôi có một loạt chúng. Để tắt nhận xét, tôi chỉ cần dán '1' vào '[]'. Tôi cũng tránh một số vấn đề tôi gặp phải với dấu ngoặc đơn trong khối nhận xét.