2013-08-21 31 views
38

Bất kỳ một thể đề nghị làm thế nào để bình luận các dòng đặc biệt trong kịch bản shell khác hơn #,Cách nhận xét các dòng cụ thể trong tập lệnh shell?

giả sử nếu tôi muốn bình luận 5 dòng, thay vì thêm # với từng ngành nghề, có cách nào khác để bình luận 5 dòng?

Xin cảm ơn trước.

+1

Đáng tiếc là không phải trong sh, Bash, và Perl. –

+5

Không. Bình luận chỉ có thể được thực hiện với hàng đầu '#'. Không có nhiều dòng chú thích (chẳng hạn như '/ * ... * /' trong php). – fedorqui

+0

Chúng được gọi là "chặn nhận xét" theo cách – wyu

Trả lời

11

Có (mặc dù đây là số khó chịu hack). Bạn có thể sử dụng số heredoc như vậy:

#!/bin/sh 

# do valuable stuff here 
touch /tmp/a 

# now comment out all the stuff below up to the EOF 
echo <<EOF 
... 
... 
... 
EOF 

Việc này đang làm gì? Một heredoc cung cấp tất cả các đầu vào sau đây cho trình kết thúc (trong trường hợp này là EOF) vào lệnh được chỉ định. Vì vậy, bạn có thể bao quanh mã bạn muốn nhận xét ra với

echo <<EOF 
... 
EOF 

và nó sẽ đưa tất cả các mã chứa giữa hai EOFs và cho chúng ăn để echo (echo không đọc từ stdin nên tất cả bị ném xa).

Lưu ý rằng với ở trên, bạn có thể đặt bất kỳ thứ gì trong số heredoc. Nó không phải là mã shell hợp lệ (tức là nó không phải phân tích cú pháp đúng).

Điều này rất khó chịu và tôi chỉ cung cấp nó như một điểm đáng chú ý. Bạn không thể làm tương đương với C của /* ... */

+1

Bạn có thể muốn sử dụng một cái gì đó khác hơn là 'echo', hoặc người nào khác gửi echo đến/dev/null. – ams

+0

Có. Lệnh không quan trọng.Tôi lưu ý rằng trên thiết bị đầu cuối Cygwin của tôi, tuy nhiên, tiếng vang đó không đọc stdin. Tôi nghi ngờ việc triển khai khác nhau –

+0

Không, nó không * đọc * bất cứ điều gì, nhưng nó * đầu ra * một dòng trống. 'true' có thể tốt hơn. – ams

24

Bạn có thể nhận xét phần của tập lệnh bằng cách sử dụng điều kiện.

Ví dụ, đoạn mã sau:

DEBUG=false 
if ${DEBUG}; then 
echo 1 
echo 2 
echo 3 
echo 4 
echo 5 
fi 
echo 6 
echo 7 

sẽ ra:

6 
7 

Để bỏ ghi chú phần của mã này, bạn chỉ cần bình luận biến:

#DEBUG=false 

(Làm như vậy sẽ in số bers từ 1 đến 7.)

0

Bạn phải dựa vào '#' nhưng để thực hiện nhiệm vụ dễ dàng hơn trong vi bạn có thể thực hiện như sau:

:10,20 s/^/# 

với 10 và 20 là số dòng bắt đầu và kết thúc của dòng bạn muốn nhận xét ra

và lùi lại khi bạn đã hoàn tất:

:10,20 s/^#// 
Các vấn đề liên quan