¿Cómo puedo comentar en cada línea de las siguientes líneas de un script?
cat ${MYSQLDUMP} | \
sed '1d' | \
tr ",;" "\n" | \
sed -e 's/[asbi]:[0-9]*[:]*//g' -e '/^[{}]/d' -e 's/""//g' -e '/^"{/d' | \
sed -n -e '/^"/p' -e '/^print_value$/,/^option_id$/p' | \
sed -e '/^option_id/d' -e '/^print_value/d' -e 's/^"\(.*\)"$/\1/' | \
tr "\n" "," | \
sed -e 's/,\([0-9]*-[0-9]*-[0-9]*\)/\n\1/g' -e 's/,$//' | \
sed -e 's/^/"/g' -e 's/$/"/g' -e 's/,/","/g' >> ${CSV}
Si intento agregar un comentario como:
cat ${MYSQLDUMP} | \ # Output MYSQLDUMP File
Yo obtengo:
#: not found
¿Es posible comentar aquí?
Respuestas:
Esto tendrá algunos gastos generales, pero técnicamente responde a su pregunta:
Y para las tuberías específicamente, hay una solución limpia sin gastos generales:
Consulte la pregunta de desbordamiento de pila Cómo colocar comentarios de línea para un comando de varias líneas .
fuente
La barra invertida final debe ser el último carácter de la línea para que se interprete como un comando de continuación. No se permiten comentarios ni espacios en blanco después.
Debería poder poner líneas de comentario entre sus comandos
fuente
|
. Si lo intentascat file1\<newline>#comment<newline>file2
, verás que no entiendescat file1 file2
, sino más biencat file1; file2
.cat file1 | # comment<newline>sort
funciona bien. También lo hacecat file1 && # comment<newline>echo foo
. Por lo tanto, los comentarios se pueden incluir después de|
o&&
o||
, pero no después de `\` o en medio de un comando.Como señaló DigitalRoss, la barra diagonal inversa no es necesaria cuando la línea termina
|
. Y puede poner comentarios en una línea que sigue a|
:fuente
La barra diagonal inversa escapa al #, interpretándolo como su carácter literal en lugar de un carácter de comentario.
fuente
$IFS
hacks de comentariosEste truco usa la expansión de parámetros en
$IFS
, que se usa para separar palabras en comandos:Similar:
Con esto, puede poner un comentario en una línea de comando con continuación:
pero el comentario deberá ser antes de la
\
continuación.Tenga en cuenta que la expansión de parámetros se realiza dentro del comentario:
Rara excepción
El único caso raro en el que esto falla es si
$IFS
se inició previamente con el texto exacto que se elimina mediante la expansión (es decir, después del#
carácter):Tenga en cuenta que la final
foobar
no tiene espacio, lo que ilustra el problema.Como
$IFS
contiene solo espacios en blanco de forma predeterminada, es extremadamente improbable que se encuentre con este problema.Crédito para el comentario de @ PJH que desencadenó esta respuesta.
fuente
Además de los ejemplos de DigitalRoss, aquí hay otra forma que puedes usar si lo prefieres en
$()
lugar de backticks`
Por supuesto, también puede usar la sintaxis de colon con comillas inversas:
Notas adicionales
La razón por la
$(#comment)
que no funciona es porque una vez que ve el#
, trata el resto de la línea como comentarios, incluyendo el cierre de paréntesis:comment)
. Entonces los paréntesis nunca se cierran.Los backticks se analizan de manera diferente y detectarán el backtick de cierre incluso después de a
#
.fuente
Aquí hay un script bash que combina las ideas y expresiones idiomáticas de varios comentarios anteriores para proporcionar, con ejemplos, comentarios en línea que tienen la forma general
${__+ <comment text>}
.En particular
<comment text>
puede ser multilínea<comment text>
no está expandido por parámetrosHay una restricción sobre
<comment text>
, a saber, los paréntesis'}'
y los corchetes desequilibrados')'
deben protegerse (es decir,'\}'
y'\)'
).Hay un requisito en el entorno bash local:
__
debe estar desarmadoCualquier otro nombre de parámetro bash sintácticamente válido servirá en lugar de
__
, siempre que el nombre no tenga un valor establecido.Sigue un script de ejemplo
fuente