bash 本机字符串操作显示混乱的输出
bash native string manipulation displays jumbled output
我尝试使用 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 本机字符串操作无法按预期工作。是因为我在做多次替换吗?
感谢您的帮助。
我无法用我的 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
字符串值中的单引号不会阻止变量替换,因为它们已经在双引号中了。
我能够通过对文件使用 dos2unix 命令来解决它。错误是由于 var3 内容末尾的回车符 return (CR)。
我尝试使用 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 本机字符串操作无法按预期工作。是因为我在做多次替换吗?
感谢您的帮助。
我无法用我的 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
字符串值中的单引号不会阻止变量替换,因为它们已经在双引号中了。
我能够通过对文件使用 dos2unix 命令来解决它。错误是由于 var3 内容末尾的回车符 return (CR)。