在bash变量中转义点

Tim*_*lis 3 bash shell

我想从Unix shell脚本(bash或ksh)中的IP地址转义点,以便我可以匹配grep命令中的确切地址.

echo $ip_addr | sed "s/\./\\\./g"
Run Code Online (Sandbox Code Playgroud)

工作(输出1\.2\.3\.4),但是

ip_addr_escaped=`echo $ip_addr | sed "s/\./\\\./g"`
echo $ip_addr_escaped
Run Code Online (Sandbox Code Playgroud)

不(产出1.2.3.4)

我怎样才能正确地逃避地址?

编辑: 看起来像

ip_addr_escaped=`echo $ip_addr | sed "s/\./\\\\\\\./g"`
Run Code Online (Sandbox Code Playgroud)

工作,但这显然是可怕的!

che*_*ner 8

bash参数扩展支持模式替换,它看起来(略微)更清晰,不需要调用sed:

echo ${ip_addr//./\\.}
Run Code Online (Sandbox Code Playgroud)