Se eu executar este código
#!/bin/bash
set -x
http --json http://example.com \
value=$'hello\r\n\r\nworld'
tenho no stdout o retorno de dois carros que tenho dentrovalue
http --json http://example.com 'value=hello
world'
Mas se eu tiver a value
string dentro de uma variável, não encontro como obter a mesma no stdout. No exemplo, se eu correr
#!/bin/bash
set -x
variable="hello\r\n\r\nworld"
http --json http://example.com \
value=$''"$variable"''
Eu não tenho as quebras de linha, mas os \r\n\r\n
caracteres
http --json http://example.com 'value=hello\r\n\r\nworld'
Como ter as quebras de linha começando do valor dentro de uma variável?
Não consigo alterar variable="hello\r\n\r\nworld"
, mas posso adicionar código entre ele e a execução do comando.
O caminho para mim é
Ou use
$'...'
na atribuição de variável, como emao invés de
Ou use
printf
para processar os escapes (isso deve funcionar em qualquer shell POSIXy):Embora observe que a substituição de comando consumiria a(s) nova(s) linha(s) final(is), se houver alguma, então você pode ter que contornar isso adicionando e removendo um caractere fictício no final:
Em seguida, use a variável resultante como de costume.