La manipulación de cadenas nativas de bash muestra una salida confusa

La manipulación de cadenas nativas de bash muestra una salida confusa

Intenté utilizar la manipulación nativa de cadenas de bash para sustituir cadenas con mis variables 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

Rendimiento esperado:

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

Salida real con cadenas desordenadas:

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

Aquí los dos últimos caracteres cambian al principio y pierdo los dos primeros caracteres de la cadena. Puedo usar SED para lo mismo. Pero solo estoy tratando de descubrir por qué la manipulación de cadenas nativas de bash no funciona como se esperaba. ¿Es porque estoy haciendo múltiples sustituciones?

Gracias por tu ayuda.

Respuesta1

Hay un carácter de retorno de carro (CR) al final del var3contenido. Después de imprimirse sin el carácter de nueva línea inmediatamente posterior (salto de línea, LF), la parte restante de la línea se imprime desde el borde izquierdo, sobrescribiendo el comienzo de la línea ya impreso.

El estándar Unix para el final de línea es LF, no CR LF.

Vuelva a escribir la línea del script donde se define o utiliza la variable dos2unixen el archivo.

información relacionada