Como adicionar uma quebra de linha dentro de uma string bash? [duplicado]

0

Eu tenho a sequência do bash a seguir e preciso adicionar uma quebra de linha a ela antes da string 'Hello':

bash -c "echo 'Hello' > /location/file"

Eu já tentei adicioná-lo com diferentes variações da sintaxe \n ; Antes das aspas duplas, dentro do intervalo das aspas duplas, e com diferentes variações de escape.

Como eu poderia adicionar uma quebra de linha antes da string 'Hello', para que ela aparecesse na segunda linha?

    
por JohnDoea 02.01.2017 / 08:32

3 respostas

3

Existem (pelo menos) três opções aqui.

  1. Use uma nova linha literal:
bash -c "echo '
Hello' > /location/file"
  1. Use printf (ou o não-padrão echo -e ), que expande caracteres de barra invertida escapados como parte dos próprios comandos (dos quais ambos são internos de shell):
bash -c "printf '\n%s\n' Hello > /location/file"
  1. Use o $' quoting não padrão do bash, que expande caracteres de barra invertida escapados como parte do shell:
bash -c "echo $'\nHello' > /location/file
    
por 02.01.2017 / 15:14
3

Você pode usar $'\n' :

$ bash -c "echo $'\nHello' >somefile"

O manual do Bash menciona isso:

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows:

(tabela de seqüências de escape padrão deixadas de fora)

    
por 02.01.2017 / 15:15
1

Você pode fazer isso com:

bash -c "echo $'\nHello'"
    
por 02.01.2017 / 15:12