Divide uma linha longa em um script para uma nova linha

0

Eu tenho escrito scripts do Unix Shell, mas sou inexperiente na formatação adequada. Houve muitos casos em que tive que escrever longas linhas para serem executadas como um único comando.

A pergunta é: existe uma maneira de dividir uma única linha longa do comando Unix em várias linhas, mas fazê-la executar como um único comando?

Obrigado. Kumarjit

    
por Kumarjit Ghosh 23.10.2018 / 05:08

2 respostas

0

Quebre a longa seqüência em componentes menores e talvez mais legíveis, ou use um "\" à direita para indicar uma quebra na linha.

de 'man bash':

If a \ pair appears, and the backslash is not itself quoted, the \ is treated as a line continuation (that is, it is removed from the input stream and effectively ignored).

    
por 23.10.2018 / 05:15
1

Uma linha longa em um único comando simples pode ser dividida ao escapar da nova linha assim:

rsync --archive --itemize-changes \
    "$source" "$target"

A barra invertida deve ser o último caractere na linha.

O bit relevante do padrão POSIX:

2.2.1 Escape Character (Backslash)

A <backslash> that is not quoted shall preserve the literal value of the following character, with the exception of a <newline>. If a <newline> follows the <backslash>, the shell shall interpret this as line continuation. The <backslash> and <newline> shall be removed before splitting the input into tokens. Since the escaped <newline> is removed entirely from the input and is not replaced by any white space, it cannot serve as a token separator.

Em um único comando composto, como um pipeline ou e / ou list etc., geralmente há pontos naturais para novas linhas que não precisam ser ignoradas (como && , || e | são terminadores de comando):

[ -e "$pathname" ] &&
printf 'Removing %s\n' "$pathname" &&
rm "$pathname"
awk -f script.awk <infile |
grep -e "$pattern" |
cat header.txt - >result.txt
    
por 23.10.2018 / 06:55