使用sed的Bash脚本在传递变量时的行为方式不同

时间:2015-06-22 14:25:50

标签: bash sed

我有一个我正在编写的脚本,它会检查一个值,然后根据该值修改它。

我试图理解为什么它以这种方式工作而不是另一种方式。基于google和stackoverflow搜索,我没有真正符合我想要理解的内容。

它尝试更改的值是test_value = 5并将5更改为6.在文件中有两条相似的行。

test_value = 5
test_value_action = log

脚本内容如下:

    #!/bin/bash
    CHECK="test_value"
    sed -i 's|^\("$CHECK" = \).*|\1'6'|' /user/file.txt

这不起作用。但是如果我硬编码检查它的值就可以了

    #!/bin/bash
    CHECK="test_value"
    sed -i 's|^\(test_value = \).*|\1'6'|' /user/file.txt

我没理解什么?另外对于我写的其他文件,文件中只有一行可以匹配,它与$ CHECK一起使用。

1 个答案:

答案 0 :(得分:2)

您的变量仍然在单引号内,因此不会扩展。使用:

sed -i 's|^\('"$CHECK"' = \)*.|\1'6'|' /user/file.txt