【问题标题】:bash native string manipulation displays jumbled outputbash 本机字符串操作显示混乱的输出
【发布时间】:2019-11-22 15:08:35
【问题描述】:

我尝试使用 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 string-substitution


    【解决方案1】:

    我无法使用我的 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 内容末尾的回车 (CR) 字符造成的。
    • 不客气!回车可能是一个棘手的问题,因为 Linux 中的编辑器在默认情况下往往不会显示它们。您可以通过在 Vim 打开时键入 :e ++ff=unix 或在调用 vim 时使用 -b 选项使 vim 显示它们。
    【解决方案2】:

    我能够通过对文件使用 dos2unix 命令来解决它。错误是由于 var3 内容末尾的回车 (CR) 字符造成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多