
Я попытался использовать собственные средства манипуляции строками 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
в файле.