【问题标题】:Bash: replacement of string with quotes (bad substitution error)Bash:用引号替换字符串(替换错误)
【发布时间】:2014-09-07 10:32:47
【问题描述】:

我正在尝试通过 bash 脚本(版本 3.2)修改文件的行并尝试了许多选项,但它们都给出了“错误替换错误”。

例如,我从 $filename(之前定义的变量)中提取该行

line=$(sed -n 24p $filename)

echo ${$line/coordinateIndex="0"/coordinateIndex="124"} 

我正在尝试将坐标索引替换为其他一些数字。这些数字在文件中的“”之间,我需要保持这种格式。

任何帮助表示赞赏;谢谢!

【问题讨论】:

    标签: string bash replace


    【解决方案1】:
    echo ${$line/coordinateIndex="0"/coordinateIndex="124"} 
    

    里面不应该有$:

    echo ${line/coordinateIndex="0"/coordinateIndex="124"}
    

    您可能还需要正确引用它以正确匹配双引号。

    echo ${line/coordinateIndex=\"0\"/coordinateIndex="124"}
    

    最好用双引号将你的论点括起来,以防止使用 IFS 的值和意外的路径名扩展进行分词:

    echo "${line/coordinateIndex=\"0\"/coordinateIndex="124"}"
    

    查看有关Parameter Expansion in the Bash Manual 用法的更多详细信息。

    【讨论】:

    • 您的最后一个建议非常有效!也感谢您提供手册的链接。
    • 我可以跟进另一个问题吗?如果我不知道坐标索引的旧值的长度(可能是 10s、100s、1000s 等),我该如何修改该命令?我试过 echo "${line/coordinateIndex=\"*\"/coordinateIndex="124"}" 但它显然不起作用。
    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 2011-10-19
    • 1970-01-01
    • 2013-06-27
    • 2023-03-23
    • 1970-01-01
    • 2019-11-02
    • 2022-11-17
    相关资源
    最近更新 更多