bash本机字符串操作显示混乱的输出

时间:2019-11-22 15:08:35

标签: bash string-substitution

我尝试使用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本机字符串操作不能按预期工作。是因为我要进行多次替换吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我无法使用我的bash版本(4.2.46)复制您的输出:

david@localhost ~ % cat test.sh
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/$var1}
echo $var5

和输出:

david@localhost ~ % bash test.sh
myfunction(123,var2,var3)
myfunction(123,2018-01-01,var3)
myfunction(123,2018-01-01,var3)

对于它的价值,我想您还意味着在脚本的最后一行中用var3代替$var3而不是var1吗?

此外,如果不是强制性的,则在下面的行中设置$var4将保存字符串的替换:

var4="myfunction('$var1','$var2','$var3')"

var4的字符串值内的单引号不会阻止变量替换,因为它们已经在双引号内。

答案 1 :(得分:1)

我可以通过在文件上使用dos2unix命令来解决该问题。该错误是由于var3内容末尾的回车符(CR)引起的。

相关问题