我想分别将@
和.
分别替换为\@
和\.
。现在我解决这个使用下列内容:我可以同时在一个参数中做两个(或多个)替换吗?
str="@foo.bar.baz"
str=${str//"."/"\."}
str=${str/"@"/"\@"}
echo $str
我可以缩短这个?
我想分别将@
和.
分别替换为\@
和\.
。现在我解决这个使用下列内容:我可以同时在一个参数中做两个(或多个)替换吗?
str="@foo.bar.baz"
str=${str//"."/"\."}
str=${str/"@"/"\@"}
echo $str
我可以缩短这个?
使用sed
:
echo "@foo.bar.baz"|sed 's/[@.]/\\&/g'
工程,但它比OP给出的三线式更慢。 –
根据要求,这当然*更短*,但你真的应该指出缺点(假设它不是代码高尔夫问题)。 –
@CharlesDuffy它取决于输入字符串的长度,对于较短的字符串bash会更快,对于真正长的字符串,'sed'实际上会更快。 – zeppelin
这立即引发了一个问题,为什么* *你(认为你)要做到这一点? – chepner
我从数据库中获得原始str,需要像我在某些守护程序配置中的OP中描述的那样使用它。这有什么问题吗? – oneohthree
请注意,更详细的代码也是更高效的代码。 –