sed
我在运行脚本时确实遇到了一个非常愚蠢但复杂的问题.sh
,要替换包含 . 的字符串=
。
当我从终端执行时,我的命令sed -i 's/^host=.*/host=myhost1/' /opt/file.txt
运行得很好。
但是,当我尝试从 .sh 文件执行此命令 CMD 时,它显示如下错误:
CMD="sed -i 's/^host=.*/host=myhost1/' /opt/file.txt"
我收到的错误是:
sed: -e expression #1, char 7: unterminated `s' command
查看错误,我发现这是=
搜索/替换字符串中的问题。我尝试了转义这个以及许多其他选项,但都没有成功。即使我=
从字符串中删除了,它在 .sh 中也能正常工作。
答案1
当您键入时CMD="sed -i 's/^host=.*/host=myhost1/' /opt/file.txt"
,您正在使用"
(双引号),要求 shell 解释诸如 之类的特殊字符*
。
它将.*
用当前目录中以 开头的所有文件的列表进行替换.
,从而造成混淆sed
。
*
使用反斜杠来消除特殊字符\*
。还可以echo "$CMD"
查看文件名。