Nhận xét trong lệnh bash nhiều dòng


32

Tệp kịch bản BASH một lệnh này rất khó hiểu, vì vậy tôi muốn viết bình luận cho từng hành động:

echo 'foo'     \
| sed 's/d/a/' \
| sed 's/e/b/' \
| sed 's/f/c/' \
> myfile

(sed chỉ là một ví dụ, thực ra nó là sự pha trộn của greps và trs và awks)

Tôi ghét phải lặp lại các dòng hoặc để mỗi bình luận cách xa dòng mà nó áp dụng.
Nhưng đồng thời, BASH dường như không cho phép bình luận "nội tuyến".

Bất kỳ cách thanh lịch để giải quyết vấn đề này?

Câu trả lời:


51

Đặt các ống ở cuối dòng với các ý kiến ​​sau nó:

$ echo 'foo' |
sed 's/f/a/' | # change first f to a
sed 's/o/b/' | # change first o to b
sed 's/o/c/'   # change second o to c
abc

có ý nghĩa, vì một cái gì đó được dự kiến ​​sẽ đi theo đường ống
MrCholo

15

Nếu bạn xảy ra với câu hỏi này trong khi tìm kiếm để nhận xét một lệnh đa dòng không phải là dòng :

$ echo 'foo' |
sed -e 's/f/a/' `: # change first f to a` \
    -e 's/o/b/' `: # change first o to b` \
    -e 's/o/c/' `: # change second o to c`

Trừ khi bạn đang làm điều gì đó thực sự đồi trụy như tự động bình luận, tôi không thể thấy lý do để thích câu trả lời này hơn câu trả lời của Mikel, nhưng nếu bạn thực sự muốn:

$ echo 'foo' |
sed 's/f/a/' | `: # change first f to a` \
sed 's/o/b/' | `: # change first o to b` \
sed 's/o/c/'   `: # change second o to c`

hoặc là:

$ echo 'foo' |
sed 's/f/a/' `: # change first f to a` |
sed 's/o/b/' `: # change first o to b` |
sed 's/o/c/' `: # change second o to c`

Nguồn: http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2005-07/0991.html


10

Chà, tôi thích cách này,

echo 'foo' | {
  # change first f to a
  # you can add more lines of comment on the command options
  sed 's/f/a/'
} | {
  # change first o to b
  sed 's/o/b/'
} | {
  # change second o to c
  sed 's/o/c/' 
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.