Sintaxe Shell: Como usar corretamente \ para quebrar linhas? [duplicar]

Esta pergunta já tem uma resposta aqui :

Comentários

  • O exemplo funciona para mim; o que você ganha?
  • @JeffSchaller Desculpe, deixei isso mais claro. O que quero dizer é que `\` é necessário para algumas coisas, mas não para outras. Eu só quero saber o uso adequado disso. E por alguma razão estranha \ não pode ser destacado pelo asterisco nos comentários
  • \ é uma continuação explícita; bash fornece PS2 se o comando ainda não estiver completo. É essa a confusão?
  • Eu ' não tenho certeza se esta é uma duplicata, pelo menos como perguntado no título. Embora o OP pergunte no contexto de & &, ainda é geral o suficiente para que uma resposta mais abrangente possa ser fornecida que não seja específica para isso.

Resposta

Se a afirmação estiver correta sem continuação, você precisa usar \. Portanto, o seguinte funciona sem barra invertida, já que você não pode “terminar um comando com um &&:

echo 1 && echo 2 

Aqui, você precisa da barra invertida:

echo 1 2 3 \ 4 

ou

echo 1 \ && echo 2 

Caso contrário, bash executaria o comando logo após processar a primeira linha sem esperar pela próxima.

Comentários

  • Então " continuation " é o termo que eu estava procurando. O manual do Bash explica isso na seção de citações, então eu encontrei isso … Agora, você disse que pode ' t terminar uma linha com && e fornecerá PS2 prompt. Quais são alguns dos outros casos ? Existe uma lista em algum lugar do manual do bash?

Resposta

Uma das diretrizes de estilo de script I ” que encontrei durante minha vida profissional em uma grande empresa de TI, obrigou-me a não usar mais de 80 caracteres por linha em um shellscript e recuo após quebrar a linha. Além disso, tive que quebrar a linha antes de um tubo ou & & ou ||. Como:

command1 \ && command2 \ || command3 \ | command4 

O objetivo era ter uma legibilidade clara.

Comentários

  • Eu também fiz isso, até que alguém disse que você pode deixar de fora o \ se você colocar o & &, || , e | na linha anterior: legibilidade ainda melhor.
  • @ole yup entendi, mas se houver uma diretriz a seguir, meu código não ' passaria no revise se eu ' d faço isso
  • +1. Eu tendo a usar o estilo mencionado por @OleTange (pelo menos para comandos longos ou complicados) – mas o estilo que você mencionou tem a vantagem clara de que você pode ver que tipo de continuação é apenas olhando apenas para a própria linha, ' não preciso olhar também para o final da linha anterior. Legal. Eu ' Não tenho certeza se gosto o suficiente para me forçar a mudar meus hábitos, mas gosto disso.
  • Francamente, prefiro colocar o && e || no início das linhas. Assim como coloco OR e AND no início das linhas em minhas cláusulas SQL WHERE.
  • IMO, há um grande benefício na consistência. Se em alguns casos você DEVE usar ` and in other cases it is optional, I would prefer to use `em todos os lugares onde meu comando continuar na próxima linha. Ao escanear um script, você pode facilmente perder que uma linha continua porque termina com && ou || ou |. (E como @ErikE diz, eu realmente prefiro ter meus && e || na próxima linha).

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *