我正在尝试理解sed
ETA 实验室上显示的命令Rich 的 sh (POSIX shell) 技巧页面,特别是在技巧中shell 引用任意字符串:
quote () { printf %s\\n "$1" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/'/" ; }
在第三个sed
命令 ( \$s/\$/'/
) 中,我理解第一个命令$
被转义以防止 shell 将其解释为假设$s
变量,因此它可以传递给sed
并被正确解释为最后一行命令的地址s
,但为什么要转义第二个$
?它不应该正确匹配行尾吗?
答案1
您只需转义$
命令中正则表达式末尾的 ,sed
使其成为文字而不是行尾。
您的sed
命令没有任何转义$
,因为反斜杠被 shell 吃掉了。所看到的命令sed
只是$s/$/'/
(在最后一行中,在行尾添加一个单引号)。
所以最后,你的问题的标题是错误的:这是关于外壳转义,而不是sed
转义。