¿Hay una manera simple de comentar un bloque de código en un script de shell?
¿Hay una manera simple de comentar un bloque de código en un script de shell?
Respuestas:
En bash:
#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment
El delimitador '
y '
alrededor del mismo END
son importantes, de lo contrario, las cosas dentro del bloque, como por ejemplo $(command)
, se analizarán y ejecutarán.
EOF
es un ejemplo clásico (y también lo es !
, un signo de exclamación en su propia), pero se puede usar SNURFLE_BURGERS
o classical_end_marker
o cualquier otra palabra que no aparece en una línea por sí sola en el material comentado de salida. Me cansaría de experimentar con espacios, etc., pero la palabra también podría funcionar con ellos.
:
) que no lee su entrada y siempre sale con un valor exitoso, y envía el "comentario" como entrada. No mucho.
No hay comentarios de bloque en el script de shell.
Utilizando vi
(sí, vi
) se puede comentar con facilidad desde la línea n a m
<ESC>
:10,100s/^/#/
(que dice, de la línea 10 a la línea de inicio de 100 sustitutos (^) con un signo #).
y un comentario con
<ESC>
:10,100s/^#//
(que dice, de la línea 10 a la línea de inicio de sustituto 100 (^) seguido de # con nota //.)
vi
Es casi universal en cualquier lugar donde hay /bin/sh
.
|noh
al final. La tubería separa comandos adicionales y no noh
sirve para nada. El resaltado de términos de búsqueda se reanudará automáticamente la próxima vez que busque algo. Ejemplo::10,100s/^/#/g|noh
<SHIFT>+G 10 <ENTER>
luego 0
o por cualquier otra forma de navegar). Luego, use <CTRL>+V
para ingresar al modo de bloqueo visual y resalte el comienzo de todas las líneas que desea comentar (en este ejemplo 90 J
). Luego presione SHIFT+I
para insertar antes del bloque resaltado. Ingrese el signo de comentario (por ejemplo #
) y presione <ESC>
para finalizar su prefijo. Esta explicación suena muy larga, pero en mi experiencia es mucho más rápida en la práctica.
Puedes usar:
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 [ ];
también funciona.
if false;
. stackoverflow.com/a/18019516/2097284
Lo que sigue debe trabajar para sh
, bash
, ksh
y zsh
.
Los bloques de código a comentar se pueden poner dentro BEGINCOMMENT
y 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"
La ejecución del código anterior daría como resultado:
This is outside the commented block
Para descomentar los bloques de código así comentados, diga
alias BEGINCOMMENT="if : ; then"
en vez de
alias BEGINCOMMENT="if [ ]; then"
en el ejemplo anterior
si puedes esquivar las comillas simples:
__='
blah blah comment.
'
Use : '
para abrir y '
cerrar.
Por ejemplo:
: '
This is a
very neat comment
in bash
'
Esto es del ejemplo de Vegas encontrado aquí
En vim:
shift-V
(ingrese al modo visual), arriba abajo líneas resaltadas en bloque:s/^/#/
el comando se verá así:
:'<,'>s/^/#
Pulsa Enter
p.ej
shift-V
jjj
:s/^/#
<enter>
:s/^#/
Puede usar el modo Visual Block de Vi / Vim, que está diseñado para cosas como esta:
Ctrl-V
Highlight first element in rows you want commented
Shift-i
#
esc
El comentario sería:
Ctrl-V
Highlight #'s
d
l
Esta es la forma interactiva de vi de hacer este tipo de cosas en lugar de contar o leer números de línea.
Por último, en Gvim usa ctrl-q para ingresar al modo Bloque visual en lugar de ctrl-v (porque ese es el atajo para pegar).
Con toda honestidad, ¿por qué tanta ingeniería excesiva ...
Considero realmente una mala práctica escribir código activo para generar código pasivo.
Mi solución: la mayoría de los editores tienen modo de selección de bloque. Solo úselo para agregar # a todas las líneas que desea comentar. Cual es el problema...
Ejemplo de bloc de notas:
Para crear: Alt - arrastre con el mouse hacia abajo, presione #.
Para eliminar: Alt-ratón arrastrado hacia abajo, desplazamiento-flecha derecha, eliminar.
Una variación del truco here-doc en la respuesta aceptada por sunny256 es usar las palabras clave de Perl para comentarios. Si sus comentarios son en realidad algún tipo de documentación, puede comenzar a usar la sintaxis de Perl dentro del bloque comentado, que le permite imprimirlo con un formato agradable, convertirlo en una página de manual, etc.
En lo que respecta al shell, solo necesita reemplazarlo 'END'
con '=cut'
.
echo "before comment"
: <<'=cut'
=pod
=head1 NAME
podtest.sh - Example shell script with embedded POD documentation
etc.
=cut
echo "after comment"
(Se encuentra en " Incrustar documentación en el script de shell ")
Otro modo es: si su editor NO TIENE opción de comentario BLOQUE,
HECHO
Funciona con cualquier editor
Me gusta una sola línea abierta y cerrada:
if [ ]; then ##
...
...
fi; ##
El '##' me ayuda a encontrar fácilmente el inicio y el final del comentario de bloque. Puedo pegar un número después del '##' si tengo muchos. Para desactivar el comentario, solo pongo un '1' en el '[]'. También evito algunos problemas que he tenido con comillas simples en el bloque comentado.