update tenta esclarecer mais, usando um exemplo, os seguintes comandos shell:
SHELLVARIABLE="1st line,
2nd line,
3rd line,
"
printf '%s' "$SHELLVARIABLE"
gera esta saída:
1st line,<newline>2nd line,<newline>3rd line,<newline>
<newline>
sendo o caractere 0x0a
/ \n
?
Formulação original de pergunta
Qual é a maneira correta (POSIX-confirm) de armazenar um caractere newline 0x0a
(também conhecido por seu estilo de comen c escape \n
) em uma variável de shell.
Eu quero ter certeza de fazer o seguinte:
SHELLVARIABLE="
"
não é meramente trabalhar por acaso, mas é, de fato, o caminho correto.
Como o printf do POSIX é perfeitamente capaz de produzir um caractere de nova linha (por exemplo, printf '\n'
, ou printf '%b' '$()
12'
) Eu tentei pela primeira vez uma forma mais explícita (? ou correta?):
SHELLVARIABLE="$(printf '\n')"
embora seja uma abordagem tentadora, não funciona. Como de acordo com o padrão , a substituição de comando (ou seja, por meio de ' '
e %code% ) deve remover
sequences of one or more newlines at the end of the substitution.
Nota: Pedir para armazenar uma nova linha final em uma variável de shell é apenas abstrair o caso de uso mais geral (na verdade, eu busco resposta), que é como armazenar uma string na variável de shell POSIX que termina com o personagem newline .