Eu encontrei isso para obter a entrada do usuário na linha de comando. Mas está falhando em reconhecer os novos caracteres de linha que coloquei na entrada. Fazendo:
#!/bin/bash
read -e -p "Multiline input=" variable;
printf "'variable=%s'" "${variable}";
- Digitar
'multi\nline'
emMultiline input=
faz aprintf
saída'variable=multinline'
- Digitar
'multi\\nline'
emMultiline input=
faz aprintf
saída'variable=multi\nline'
Como printf
posso imprimir a nova linha que li read -p
, ou seja, saída
multi
line
Em vez de multinline
ou multi\nline
?
Perguntas relacionadas:
- O que a opção -p faz no comando read?
- bash: leia: como capturar o caractere '\n' (nova linha)?
- shell: leia: diferencie entre EOF e nova linha
- https://stackoverflow.com/questions/4296108/how-do-i-add-a-line-break-for-read-command
- Ler argumentos separados por nova linha
- https://stackoverflow.com/questions/43190306/how-to-add-new-line-after-user-input-in-shell-scripting
Se digitar
\n
(como nos dois caracteres\
en
) for aceitável, você pode usarprintf
para interpretá-lo:Por exemplo:
Do manual do bash :
O bit "continuação de linha" parece implicar que você não pode escapar de novas linhas, a menos que use um caractere diferente como delimitador de linha.
@muru tem a resposta certa do bash.
Uma alternativa: vamos
printf
lidar com as sequências de barra invertida, mas você deve ter cuidado com%
os caracteres na entradaEm vez de usar algum recurso de
bash
ouprintf
, eu costumavased
substituir o caractere de nova linha com escape\\n
por uma nova linha real:Referências: