manipulação de string nativa do bash exibe saída confusa

manipulação de string nativa do bash exibe saída confusa

Tentei usar a manipulação nativa de string bash para substituir string por minhas variáveis ​​​​de shell.

var1='123'
var2='2018-01-01'
var3='2018-01-02'
var4='myfunction('var1','var2','var3')'

var5=${var4/var1/$var1}
echo $var5

var5=${var5/var2/$var2}
echo $var5

var5=${var5/var1/$var3}
echo $var5

Resultado esperado:

myfunction('123','var2','var3')
myfunction('123','2018-01-01','var3')
myfunction('123','2018-01-01','2018-01-02')

Saída real com strings confusas:

myfunction('123','var2','var3')
myfunction('123','2018-01-01','var3')
')function('123','2018-01-01','2018-01-02

Aqui os dois últimos caracteres mudam no início e perco os dois primeiros caracteres da string. Posso usar o SED para o mesmo. Mas estou apenas tentando descobrir por que a manipulação de strings nativas do bash não funcionará conforme o esperado. É porque estou fazendo múltiplas substituições?

Obrigado pela ajuda.

Responder1

Há um caractere de retorno de carro (CR) no final do var3conteúdo. Após ser impressa sem o caractere de nova linha imediatamente seguinte (line feed, LF), a parte restante da linha é impressa a partir da borda esquerda, substituindo o início da linha já impresso.

O padrão Unix de final de linha é LF, não CR LF.

Reescreva a linha do script onde a variável está definida ou use dos2unixno arquivo.

informação relacionada