Esiste un modo semplice per commentare un blocco di codice in uno script di shell?
Esiste un modo semplice per commentare un blocco di codice in uno script di shell?
Risposte:
In bash:
#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment
Il delimitatore '
e '
intorno END
sono importanti, altrimenti le cose all'interno del blocco come ad esempio $(command)
verranno analizzate ed eseguite.
EOF
è un classico esempio (e così è !
, un punto esclamativo da solo), ma potresti usare SNURFLE_BURGERS
o classical_end_marker
o qualsiasi altra parola che non appare su una riga da sola nel materiale commentato. Sarei schifoso di sperimentare spazi, ecc., Ma la parola potrebbe benissimo funzionare anche con loro.
:
) che non legge il suo input e esce sempre con un valore positivo e invia il "commento" come input. Non molto.
Non ci sono commenti di blocco sullo script della shell.
Usando vi
(sì, vi
) puoi facilmente commentare dalla riga n alla m
<ESC>
:10,100s/^/#/
(che legge, dalla riga 10 a 100 la riga sostitutiva inizia (^) con un segno #).
e un commento con
<ESC>
:10,100s/^#//
(che recita, dalla riga 10 a 100 riga sostitutiva inizio (^) seguita da # con annotazione //.)
vi
è quasi universale ovunque ci sia /bin/sh
.
|noh
alla fine. La pipe separa i comandi aggiuntivi ed noh
è per nessuna luce. L'evidenziazione dei termini di ricerca riprenderà automaticamente alla successiva ricerca di qualcosa. Esempio::10,100s/^/#/g|noh
<SHIFT>+G 10 <ENTER>
poi 0
o da qualsiasi altro modo per navigare). Quindi utilizzare <CTRL>+V
per accedere alla modalità blocco visivo ed evidenziare l'inizio di tutte le righe che si desidera commentare (in questo esempio 90 J
). Quindi premere SHIFT+I
per inserire prima del blocco evidenziato. Immettere il segno del commento (ad es. #
) E premere <ESC>
per terminare il prefisso. Questa spiegazione sembra molto lunga, ma nella mia esperienza è molto più veloce in pratica.
Puoi usare:
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 [ ];
.
if false;
. stackoverflow.com/a/18019516/2097284
Il seguente dovrebbe funzionare per sh
, bash
, ksh
e zsh
.
I blocchi di codice da commentare possono essere inseriti BEGINCOMMENT
e 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"
L'esecuzione del codice precedente comporterebbe:
This is outside the commented block
Per decommentare i blocchi di codice così commentati, diciamo
alias BEGINCOMMENT="if : ; then"
invece di
alias BEGINCOMMENT="if [ ]; then"
nell'esempio sopra.
se riesci a schivare le virgolette singole:
__='
blah blah comment.
'
Utilizzare : '
per aprire e '
chiudere.
Per esempio:
: '
This is a
very neat comment
in bash
'
Questo è l'esempio di Vegas trovato qui
In Vim:
shift-V
(entra in modalità visiva), su in giù le linee di evidenziazione in blocco:s/^/#/
il comando sarà simile al seguente:
:'<,'>s/^/#
premi invio
per esempio
shift-V
jjj
:s/^/#
<enter>
:s/^#/
Puoi usare la modalità Visual Block di Vi / Vim che è progettata per cose come questa:
Ctrl-V
Highlight first element in rows you want commented
Shift-i
#
esc
Uncomment sarebbe:
Ctrl-V
Highlight #'s
d
l
Questo è il modo interattivo di vi di fare questo genere di cose piuttosto che contare o leggere i numeri di riga.
Infine, in Gvim usi ctrl-q per entrare in modalità Visual Block piuttosto che ctrl-v (perché questa è la scorciatoia per incollare).
In tutta onestà, perché tanta ingegnerizzazione ...
Ritengo davvero una cattiva pratica scrivere codice attivo per generare codice passivo.
La mia soluzione: la maggior parte degli editor ha la modalità di selezione blocco. Basta usarlo per aggiungere # a tutte le righe che si desidera commentare. Qual è il grosso problema ...
Esempio di blocco note:
Per creare: Alt - mousedrag down, premere #.
Per eliminare: Alt-mousedrag in basso, Maiusc-freccia destra, Elimina.
Una variante del trucco here-doc nella risposta accettata da sunny256 è l'uso delle parole chiave Perl per i commenti. Se i tuoi commenti sono in realtà una sorta di documentazione, puoi quindi iniziare a utilizzare la sintassi Perl all'interno del blocco commentato, che ti consente di stamparlo in modo ben formattato, convertirlo in una pagina man, ecc.
Per quanto riguarda la shell, è sufficiente sostituirla 'END'
con '=cut'
.
echo "before comment"
: <<'=cut'
=pod
=head1 NAME
podtest.sh - Example shell script with embedded POD documentation
etc.
=cut
echo "after comment"
(Trovato su " Incorporamento della documentazione nello script di shell ")
Un'altra modalità è: se il tuo editor NON HA UN BLOCCO opzione di commento,
FATTO
Funziona con QUALSIASI editor
Mi piace aprire e chiudere una sola riga:
if [ ]; then ##
...
...
fi; ##
'##' mi aiuta a trovare facilmente l'inizio e la fine del commento sul blocco. Posso inserire un numero dopo il '##' se ne ho un sacco. Per disattivare il commento, ho solo un '1' nel '[]'. Inoltre evito alcuni problemi che ho avuto con virgolette singole nel blocco commentato.