In uno script bash ricevuto da un altro programmatore, alcune righe superavano le 80 colonne di lunghezza. Qual è il carattere o la cosa da aggiungere alla riga per indicare che la riga continua sulla riga successiva?
In uno script bash ricevuto da un altro programmatore, alcune righe superavano le 80 colonne di lunghezza. Qual è il carattere o la cosa da aggiungere alla riga per indicare che la riga continua sulla riga successiva?
Risposte:
Il carattere è una barra rovesciata \
Dal manuale di bash :
Il carattere barra rovesciata "\" può essere utilizzato per rimuovere qualsiasi significato speciale per il carattere successivo letto e per la continuazione della riga.
^M. Il problema sembra essere che lo script mi è stato dato da qualcuno che usa Windows. Un rapido dos2unixrisolto :)
In generale, è possibile utilizzare una barra rovesciata alla fine di una riga in modo che il comando continui alla riga successiva. Tuttavia, ci sono casi in cui i comandi vengono implicitamente continuati, vale a dire quando la riga termina con un token che non può terminare legalmente un comando. In tal caso, la shell sa che sta arrivando altro e il backslash può essere omesso. Qualche esempio:
# In general
$ echo "foo" \
> "bar"
foo bar
# Pipes
$ echo foo |
> cat
foo
# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar
Diversa, ma correlata, è la continuazione implicita tra virgolette. In questo caso, senza una barra rovesciata, stai semplicemente aggiungendo una nuova riga alla stringa.
$ x="foo
> bar"
$ echo "$x"
foo
bar
Con una barra rovesciata, dividi nuovamente la riga logica in più righe logiche.
$ x="foo\
> bar"
$ echo "$x"
foobar
[[- ]]condizione, ma non in altri, e sto cercando di capire le regole.
\fa il lavoro. La risposta di @ Guillaume e il commento di @ George rispondono chiaramente a questa domanda. Qui spiego perché The backslash has to be the very last character before the end of line character.Considera questo comando:
mysql -uroot \ -hlocalhost
Se è presente uno spazio dopo \, la continuazione della riga non funzionerà. Il motivo è che \ rimuove il significato speciale per il carattere successivo che è uno spazio non il carattere di avanzamento riga invisibile. Il carattere di avanzamento riga è dopo lo spazio non \in questo esempio.