2009-06-03 17 views

Odpowiedz

259

W bash:

#!/bin/bash 
echo before comment 
: <<'END' 
bla bla 
blurfl 
END 
echo after comment 

' i ' wokół END separatora są ważne, inaczej rzeczy wewnątrz bloku, jak na przykład $(command) będzie analizowany i wykonywany.

Aby uzyskać wyjaśnienie, patrz pytanie: this i this.

+17

Sprytna sztuczka - o ile słowo kluczowe "KONIEC" (które oczywiście zostało wybrane przez użytkownika) nie pojawia się w osobnej linii w materiale, który ma zostać skomentowany. –

+2

Przyjemne korzystanie z tego dokumentu :) – OscarRyz

+0

Bardzo fajna sztuczka. BTW, powinno to działać również w dowolnej powłoce zgodnej z Bourne. –

73

Brak komentarza bloku do skryptu powłoki.

Korzystanie vi (tak, vi) można łatwo wypowiedzieć z linii n do m

<ESC> 
:10,100s/^/#/ 

(który odczytuje z linii 10 do 100 początku linii substytut (^) z # znak.)

i un komentarz z

<ESC> 
:10,100s/^#// 

(który czyta, od 10 do 100 linii startu linii substytut (^), a następnie # z zauważając //.)

vi jest niemal powszechne wszędzie tam, gdzie jest /bin/sh.

+0

Dobra sztuczka z regularnym wyrażeniem na vi, aby umieścić # przed liniami –

+5

Po prostu wskazówka - jeśli używasz vima, a to kończy się podświetleniem początku każdej linii, dodaj '| noh' do końca.Rura oddziela dodatkowe polecenia i 'noh' jest dla niehighlight Podświetlanie haseł wyszukiwania zostanie automatycznie wznowione przy następnym wyszukiwaniu czegoś Przykład:': 10,100s/^/#/g | noh' – Matthew

+0

I trzeba to zautomatyzować ze skryptu. Czy istnieje sposób na zrobienie tego w pliku z vi bez interwencji człowieka? –

14

W vim:

  1. Idź do pierwszego wiersza bloku chcesz skomentować
  2. shift-V (wejść w tryb wizualny), w górę w dół linii podświetleniem w bloku
  3. wykonać następujące czynności w sprawie wyboru :s/^/#/
  4. polecenie będzie wyglądać następująco:

    :'<,'>s/^/# 
    
  5. naciśnij enter

np.

shift-V 
jjj 
:s/^/# 
<enter> 
+6

Aby odkomentować, użyj ': s/^ # /' – Buge

+0

Sprawdź odpowiedź @ horta: https: // stackoverflow. com/a/28376319/3506015 - jest jeszcze mniej naciśnięć klawiszy! – geedoubleya

38

Można użyć:

if [ 1 -eq 0 ]; then 
    echo "The code that you want commented out goes here." 
    echo "This echo statement will not be called." 
fi 
+10

To jest klasyczne, ale jak zauważa http://stackoverflow.com/a/19409316/832230, po prostu 'if [];' również działa. –

+4

Być może jaśniejsze: 'if false;'. http://stackoverflow.com/a/18019516/2097284 –

+2

To tylko wydaje się działać tylko to, że skomentowany tekst jest w rzeczywistości kodem. Występują problemy z komentarzami z rurami i średnikami. Odpowiedź Sunny256 zadziałała. – swdev

17

jeśli można unik apostrofów:

__=' 
blah blah comment. 
' 
+0

Podoba mi się to. Co jednak znaczy podwójne podkreślenie? Jak najlepiej mogę powiedzieć, że jest to tylko nazwa zmiennej z konwencją, że powinna być traktowana jako prywatna? – chessofnerd

+0

Zapewnia także podświetlanie składni w większości edytorów i można go wywoływać w razie potrzeby za pomocą $ __, chociaż sugerowałbym nazwę zmiennej, taką jak dokumentacja lub dokumenty, dla jasności. – jasonleonhard

+0

Możesz również dodać słowo lokalne z przodu [ref here] (http://tldp.org/LDP/abs/html/localvar.html) – jasonleonhard

21

Poniższy powinien pracować dla sh, bash, ksh i zsh.

Bloki kodu być komentowane można umieścić wewnątrz BEGINCOMMENT i 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" 

Wykonanie powyższego kodu spowoduje:

This is outside the commented block 

W celu Odkomentuj tak bloki kodu skomentowały, powiedzmy:

alias BEGINCOMMENT="if : ; then" 

zamiast

alias BEGINCOMMENT="if [ ]; then" 

w przykładzie powyżej.

4

Można użyć trybu Visual Zablokuj VI/VIM, który przeznaczony jest do rzeczy tak:

Ctrl-V 
Highlight first element in rows you want commented 
Shift-i 
# 
esc 

Odkomentuj byłoby:

Ctrl-V 
Highlight #'s 
d 
l 

To Vi interaktywny sposób prowadzenia tego rodzaju rzeczy zamiast liczyć lub czytać numery linii.

Wreszcie, w Gvim użyj ctrl-q, aby przejść do trybu bloków wizualnych zamiast ctrl-v (ponieważ jest to skrót do wklejenia).

+0

to, a każdy nowoczesny edytor ma tryb wyboru bloku. – Rusty75

+0

Uwielbiam tę uproszczoną metodę. : o) – geedoubleya

0

Odmianą tu-doc trika w zaakceptowanej odpowiedzi przez sunny256 jest użycie słów kluczowych Perl do komentarzy. Jeśli twoje komentarze są w rzeczywistości jakąś dokumentacją, możesz zacząć używać składni Perla wewnątrz skomentowanego bloku, co pozwala na wydrukowanie jej ładnie sformatowanej, przekonwertowanie jej na stronę podręcznika itp.

O ile powłoka dotyczy, wystarczy zastąpić 'END' z '=cut'.

echo "before comment" 
: <<'=cut' 
=pod 

=head1 NAME 
    podtest.sh - Example shell script with embedded POD documentation 

etc. 

=cut 
echo "after comment" 

(Znalezione na "Embedding documentation in shell script")

3

Tyle overengineering ...

uważam za bardzo złą praktyką, aby napisać aktywny kod do generowania kodu pasywnego.

Moje rozwiązanie: większość edytorów posiada tryb wyboru bloku. Po prostu użyj go, aby dodać # do wszystkich linii, które chcesz skomentować. Co w tym wielkiego ...

Notepad przykład:

Aby utworzyć: Alt - mousedrag w dół, naciśnij #.

Aby usunąć: Alt-mousedrag w dół, shift-strzałka w prawo, usuń.

Powiązane problemy