我尝试使用 bash 字符串本机操作来用我的 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
预期输出:
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
内容末尾有一个回车符 (CR) var3
。在打印后没有立即跟随换行符(换行符,LF),该行的剩余部分从左边缘打印,覆盖已经打印的行的开头。
Unix 标准的行结束符是 LF,而不是 CR LF。
dos2unix
重写在文件上定义或使用变量的脚本行。