Em um script bash que recebi de outro programador, algumas linhas ultrapassavam 80 colunas de comprimento. Qual é o caractere ou coisa a ser adicionada à linha para indicar que a linha continua na próxima linha?
Em um script bash que recebi de outro programador, algumas linhas ultrapassavam 80 colunas de comprimento. Qual é o caractere ou coisa a ser adicionada à linha para indicar que a linha continua na próxima linha?
Respostas:
O personagem é uma barra invertida \
O caractere de barra invertida '\' pode ser usado para remover qualquer significado especial para o próximo caractere lido e para a continuação da linha.
^M
. O problema parece ser que o script foi dado a mim por alguém que usa o Windows. Um rápido dos2unix
consertou :)
Em geral, você pode usar uma barra invertida no final de uma linha para que o comando continue para a próxima linha. No entanto, há casos em que os comandos são continuados implicitamente, nomeadamente quando a linha termina com um token que não pode terminar legalmente um comando. Nesse caso, o shell sabe que mais está por vir, e a barra invertida pode ser omitida. Alguns exemplos:
# In general
$ echo "foo" \
> "bar"
foo bar
# Pipes
$ echo foo |
> cat
foo
# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar
Diferente, mas relacionado, é a continuação implícita entre aspas. Nesse caso, sem uma barra invertida, você está simplesmente adicionando uma nova linha à string.
$ x="foo
> bar"
$ echo "$x"
foo
bar
Com uma barra invertida, você está novamente dividindo a linha lógica em várias linhas lógicas.
$ x="foo\
> bar"
$ echo "$x"
foobar
[[
- ]]
, mas não em outras, e estou tentando descobrir as regras.
\
faz o trabalho. A resposta de @ Guillaume e o comentário de @George respondem claramente a esta pergunta. Aqui eu explico por que The backslash has to be the very last character before the end of line character.
Considere este comando:
mysql -uroot \ -hlocalhost
Se houver um espaço depois \
, a continuação da linha não funcionará. A razão é que \
remove o significado especial para o próximo caractere, que é um espaço e não o caractere invisível de avanço de linha. O caractere de avanço de linha está após o espaço, não \
neste exemplo.