shell - programas - scripts bash ejemplos
¿Forma de crear comentarios multilínea en Bash? (7)
Recientemente comencé a estudiar el script de shell y me gustaría poder comentar un conjunto de líneas en un script de shell. Quiero decir que es en el caso de C / Java:
/* comment1
comment2
comment3
*/`
¿Cómo podría hacer eso?
# Me gusta la pereza y la simplicidad. Usaría # con una solución alternativa divertida:
1 PRESIONE:] buscar ctrl + F o cmd + F o lo que sea [para activar la funcionalidad de búsqueda
2 use una expresión regular en el campo de búsqueda como:
(^.+)
3 reemplace con:
# $1
o si prefiere
#$1
# Nota: es posible que no tenga los tres pasos en su editor. En ese caso, use una herramienta de expresiones regulares en línea (no puede sugerir una aquí por razones de política):
- Seleccione, copie el texto donde quiera que esté y péguelo en la herramienta de expresiones regulares en línea
-
Use
(^.+)
Como expresiones regulares y#$1
o#/1
como patrones de sustitución - Seleccione, copie el texto y péguelo donde comenzó
# ¡Disfruta tus hashes!
¿Cuál es tu opinión sobre este?
function giveitauniquename()
{
so this is a comment
echo "there''s no need to further escape apostrophes/etc if you are commenting your code this way"
the drawback is it will be stored in memory as a function as long as your script runs unless you explicitly unset it
only valid-ish bash allowed inside for instance these would not work without the "pound" signs:
1, for #((
2, this #wouldn''t work either
function giveitadifferentuniquename()
{
echo nestable
}
}
Así es como hago comentarios multilínea en bash.
Este mecanismo tiene dos ventajas que aprecio. Una es que los comentarios pueden estar anidados. La otra es que los bloques se pueden habilitar simplemente comentando la línea de inicio.
#!/bin/bash
# : <<''####.block.A''
echo "foo {" 1>&2
fn data1
echo "foo }" 1>&2
: <<''####.block.B''
fn data2 || exit
exit 1
####.block.B
echo "can''t happen" 1>&2
####.block.A
En el ejemplo anterior, el bloque "B" está comentado, pero las partes del bloque "A" que no son el bloque "B" no están comentadas.
Ejecutar ese ejemplo producirá esta salida:
foo {
./example: line 5: fn: command not found
foo }
can''t happen
Bash no proporciona una función incorporada, pero hay hacks que utilizan la sintaxis de bash existente. Lo más simple es usar un HEREDOC, pero haz que sea obvio lo que estás haciendo, y usa el mismo marcador HEREDOC en todas partes:
<< --MULTILINE-COMMENT--
line 1
line 2
line 3
line 4
--MULTILINE-COMMENT--
Algunas publicaciones mencionan que el marcador HEREDOC debe citarse para evitar algunos efectos secundarios de análisis de shell.
Solo he encontrado que esto es necesario si usa comillas inversas en su comentario.
Incluso con las
$variables
set -o verbose
y
$variables
mencionadas en el comentario, no es necesario citar el marcador.
YMMV.
Si usa el enfoque
: ''
mencionado en otra respuesta, documente lo que es a través de un meta-comentario, use el mismo meta-comentario en todas partes y recuerde duplicar cualquier aparición de
''
dentro del comentario (un editor de colores de sintaxis lo hará obvio):
: ''Multiline comment:
line 1
line 2 we''''re going to try this eventually
line 3
''
Ambos son hacks para que puedan romper los guiones en el futuro.
Seguramente hay otras técnicas, pero no parece haber una forma "convencional" de hacerlo.
Comentario multilínea en bash
: <<''END_COMMENT''
This is a heredoc (<<) redirected to a NOP command (:).
The single quotes around END_COMMENT are important,
because it disables variable resolving and command resolving
within these lines. Without the single-quotes around END_COMMENT,
the following two $() `` commands would get executed:
$(gibberish command)
`rm -fr mydir`
comment1
comment2
comment3
END_COMMENT
Después de leer las otras respuestas aquí, se me ocurrió lo siguiente, que en mi humilde opinión deja en claro que es un comentario. Especialmente adecuado para la información de uso en script:
<< ////
Usage:
This script launches a spaceship to the moon. It''s doing so by
leveraging the power of the Fifth Element, AKA Leeloo.
Will only work if you''re Bruce Willis or a relative of Milla Jovovich.
////
Como programador, la secuencia de barras se registra inmediatamente en mi cerebro como un comentario (aunque las barras se usan normalmente para comentarios de línea).
Por supuesto,
"////"
es solo una cadena;
El número de barras en el prefijo y el sufijo debe ser igual.
Use
: ''
para abrir y
''
para cerrar.
Por ejemplo:
: ''
This is a
very neat comment
in bash
''