请看这些简单的命令:
$ echo $tmp
UY\U[_
$ echo "a" | sed "s|a|${tmp}|g"
UY[_
被\U
吃掉了。其他反斜杠也不会存在。
如何使上述命令按预期工作?
如果它只是被 sed “吃掉”并转义的反斜杠就足够了,那么请尝试:
echo "a" | sed "s|a|${tmp//\\/\\\\}|g"
对你来说足够困惑吗?\\
表示单个 \ 因为它也需要在 shell 中转义。inital//
类似于 中的g
修饰符s/foo/bar/g
,如果您只想替换第一个出现的模式,请跳过它。
有关文档${parameter/pattern/string}
可在此处获得:http ://www.gnu.org/s/bash/manual/bash.html#Shell-Parameter-Expansion
编辑:根据您想要做什么,您实际上最好不要使用 sed 。
$ tmp="UY\U[_"
$ in="a"
$ echo ${in//a/$tmp}
UY\U[_
您可以通过 sed 重新解析 $tmp 本身
echo "a" | sed "s|a|$(echo ${tmp} | sed 's|\\|\\\\|g')|g"