En un script bash que obtuve de otro programador, algunas líneas excedían las 80 columnas de longitud. ¿Cuál es el carácter o cosa que se agregará a la línea para indicar que la línea continúa en la línea siguiente?
En un script bash que obtuve de otro programador, algunas líneas excedían las 80 columnas de longitud. ¿Cuál es el carácter o cosa que se agregará a la línea para indicar que la línea continúa en la línea siguiente?
Respuestas:
El personaje es una barra invertida \
Desde el manual de bash :
El carácter de barra invertida '\' puede usarse para eliminar cualquier significado especial para el siguiente carácter leído y para la continuación de línea.
^M
. El problema parece ser que el script me lo dio alguien que usa Windows. Un dos2unix
En general, puede usar una barra invertida al final de una línea para que el comando continúe en la siguiente línea. Sin embargo, hay casos en los que los comandos continúan implícitamente, es decir, cuando la línea termina con un token que no puede terminar legalmente un comando. En ese caso, el shell sabe que se avecinan más y se puede omitir la barra invertida. Algunos ejemplos:
# In general
$ echo "foo" \
> "bar"
foo bar
# Pipes
$ echo foo |
> cat
foo
# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar
Diferente, pero relacionada, es la continuación implícita entre comillas. En este caso, sin una barra invertida, simplemente está agregando una nueva línea a la cadena.
$ x="foo
> bar"
$ echo "$x"
foo
bar
Con una barra invertida, vuelve a dividir la línea lógica en varias líneas lógicas.
$ x="foo\
> bar"
$ echo "$x"
foobar
[[
- ]]
condición, pero no en otros, y estoy tratando de averiguar las reglas.
\
hace el trabajo. La respuesta de @ Guillaume y el comentario de @ George responden claramente a esta pregunta. Aquí te explico por qué The backslash has to be the very last character before the end of line character.
considera este comando:
mysql -uroot \ -hlocalhost
Si hay un espacio después \
, la continuación de la línea no funcionará. La razón es que \
elimina el significado especial para el siguiente carácter, que es un espacio, no el carácter de avance de línea invisible. El carácter de avance de línea está después del espacio, no \
en este ejemplo.