1

在下面的 shell 脚本中,我尝试A2D(Vlog-Ams-@Cross)使用转义的特殊字符进行打印。例如替换(\(但 sed 不会有任何效果。

#! /bin/sh
parameter="A2D(Vlog-Ams-@Cross)"
echo $parameter
parameterz=`echo "$parameter" | sed 's/(/\\(/g'`
echo $parameterz

输出是

A2D(Vlog-Ams-@Cross)
A2D(Vlog-Ams-@Cross)

如果我在我的 c-shell 终端上做同样的事情,它工作正常。

有任何想法吗?

4

2 回答 2

2

您在反引号命令中使用反斜杠,这很棘手。如果 sed 命令没有出现在反引号中,它将正常工作。但是,当 shell 查找结束反引号时,它会删除一级反斜杠引用,因此您会得到

sed 's/(/\(/g'

这是无操作的。如果您的外壳允许,请使用$(...)而不是反引号;通过这种方式,您可以避免这些引用问题。

于 2012-09-13T19:58:21.097 回答
1

在您的替换\\(中,第一个\逃脱了第二个\。但是你也必须逃避(:

$  echo 'A2D(Vlog-Ams-@Cross)' | sed -e 's/(/\\\(/g' -e 's/)/\\\)/g'
A2D\(Vlog-Ams-@Cross\)
于 2012-09-13T13:42:51.827 回答