Como devo passar um caractere de nova linha para um comando em um script?

1

Eu tenho um script bash, que concatena seus argumentos por um determinado separador

#! /bin/bash   

d="$1";
shift;

echo -n "$1";
shift;
printf "%s" "${@/#/$d}";

É assim que eu uso:

$ a=(one two 'three four' five)
$ myscript ' *** '  "${a[@]}" 
one *** two *** three four *** five

Agora, gostaria de criar uma nova linha como separador, mas isso não acontece:

$ myscript '\n'  "${a[@]}" 
one\ntwo\nthree four\nfive

Como devo passar um caractere de nova linha para o comando printf no script? (Não estou procurando reescrever meu script, se isso for possível). Obrigado.

    
por Tim 14.11.2018 / 21:46

2 respostas

2

Use o tipo de citação $'...' , se quiser que o \n seja expandido para um caractere de nova linha:

myscript $'\n'  "${a[@]}"

Ou passe a nova linha literalmente entre aspas simples ou duplas:

myscript '
'  "${a[@]}"
    
por 14.11.2018 / 21:51
0

Isso funciona para mim:

#! /bin/bash

d="$1";
shift;

echo -n "$1";
shift;
echo -e "${@/#/$d}";

Saída:

$ ./1.sh ' *** '  "${a[@]}"
one *** two  *** three four  *** five

$ ./1.sh '\n'  "${a[@]}"
one
two
three four
five
    
por 14.11.2018 / 21:55