Rich 的 POSIX shell 技巧 - 为什么在 sed 命令中转义 $?

Rich 的 POSIX shell 技巧 - 为什么在 sed 命令中转义 $?

我正在尝试理解sedETA 实验室上显示的命令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转义。

相关内容