O problema é que você tem um Carriage-Return incorporado (CR, \r
). Isso faz com que o ponto de inserção de texto do terminal retroceda até o início da linha que está sendo impressa. É por isso que você está vendo o 'olá' no início da linha em você $newVAR
example - sed -n l
exibe uma visualização legível de caracteres não imprimíveis (e fim de linha).
var=ab$'\r'c ; echo "$var"; printf %s "$var" | sed -n l
# output:
cb
ab\rc$
Você pode testá-lo com uma simples verificação de condição bash:
[[ $var == *$'\r'* ]] && echo yes || echo no
# output:
yes
Você pode combinar o teste e corrigir em uma etapa testando \r
(s) e removendo-os por:
fix="${var//$'\r'/}"; echo "$var"; echo "$fix"
# output:
cb
abc
A correção usa Expansão do Parâmetro da Shell . O formulário específico usado acima é para substituir substrings com base no seu padrão fornecido: ${parameter/pattern/string}
< -
Isso substitui apenas o primeiro padrão encontrado por string na variável * parâmetro. Para substituir todos padrões, basta alterar o primeiro /
para //
.