bash - sustituir - Cómo colocar un comentario de línea para un comando de varias líneas
sed eliminar lineas (4)
Así es como lo hago. Esencialmente, al usar la sustitución de comandos de Bash backtick, se pueden colocar estos comentarios en cualquier lugar a lo largo de una larga línea de comandos, incluso si se divide entre líneas. He puesto el comando echo delante de su ejemplo para que pueda ejecutar el ejemplo y ver cómo funciona:
echo CommandName InputFiles `#1st comment` /
--option1 arg1 `#2nd comment` /
--option2 arg2 `#3rd comment`
Otro ejemplo donde puede poner múltiples comentarios en diferentes puntos en una línea:
some_cmd --opt1 `#1st comment` --opt2 `#2nd comment` --opt3 `#3rd comment`
Esta pregunta ya tiene una respuesta aquí:
- Comentando en un script de Bash 6 respuestas
Sé cómo escribir un comando multilínea en un script Bash, pero ¿cómo puedo agregar un comentario para cada línea en un comando multilínea?
CommandName InputFiles / # This is the comment for the 1st line
--option1 arg1 / # This is the comment for the 2nd line
--option2 arg2 # This is the comment for the 3nd line
Pero desafortunadamente, el comentario después del carácter de continuación /
romperá el comando.
Basado en el comentario de pjh a otra respuesta a esta pregunta , reemplazando IFS
con una variable que se sabe que no contiene caracteres que no sean espacios en blanco.
comment=
who ${comment# This is the command} /
-u ${comment# This is the argument}
Me temo que, en general, no puedes hacer lo que estás pidiendo. Lo mejor que puede hacer es un comentario en las líneas antes del comando, o un solo comentario al final de la línea de comandos, o un comentario después del comando.
De esta manera, no puede administrar los comentarios entremezclados dentro de un comando. El /
s expresa la intención de fusionar líneas, por lo que para todos los intentos, se intenta intercalar comentarios en una sola línea, lo cual no funciona de todos modos porque a /
tiene que estar al final de la línea para tener ese efecto .
Podrías almacenar los argumentos en una matriz:
args=(InputFiles # This is the comment for the 1st line
# You can have whole lines of comments in between, useful for:
#--deprecated-option # This isn''t use any more
--option1 arg1 # This is the comment for the 2nd line
# And even blank lines in between for readability
--option2 arg2 # This is the comment for the 3nd line
)
CommandName "${args[@]}"
Sin embargo, creo que esto parece un poco extraño si es solo con el propósito de permitir comentarios para cada argumento. Por lo tanto, solo reescribo el comentario para que refiera los argumentos individuales y lo coloque por encima de todo el comando.