我有一个我正在编写的脚本,它会检查一个值,然后根据该值修改它。
我试图理解为什么它以这种方式工作而不是另一种方式。基于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一起使用。
答案 0 :(得分:2)
您的变量仍然在单引号内,因此不会扩展。使用:
sed -i 's|^\('"$CHECK"' = \)*.|\1'6'|' /user/file.txt