собственные операции со строками bash отображают перемешанный вывод

собственные операции со строками bash отображают перемешанный вывод

Я попытался использовать собственные средства манипуляции строками bash для замены строк переменными моей оболочки.

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

Ожидаемый результат:

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

Фактический вывод с перемешанными строками:

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

Здесь последние два символа смещаются в начало, и я теряю первые два символа строки. Я могу использовать SED для того же самого. Но я просто пытаюсь понять, почему собственные манипуляции строками bash не будут работать так, как ожидалось. Это потому, что я делаю несколько замен?

Спасибо за вашу помощь.

решение1

В конце var3контента есть символ возврата каретки (CR). После того, как он будет напечатан без непосредственно следующего за ним символа новой строки (перевода строки, LF), оставшаяся часть строки будет напечатана с левого края, перезаписывая уже напечатанное начало строки.

Стандартом окончания строки в Unix является LF, а не CR LF.

Перепишите строку скрипта, в которой определена переменная, или используйте ее dos2unixв файле.

Связанный контент