
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 var3
conteú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 dos2unix
no arquivo.