
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 var3
contenido. 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 dos2unix
en el archivo.