shell脚本中如何自动对变量中的/进行转义

5,653 阅读1分钟

当我们写shell脚本的时候,如果需要在脚本中自动对变量中的特殊字符进行转义,有没有通用的做法来解决一下我们遇到的这种场景呢?

例如,现在有变量path=/opt/test,如果我想通过sed命令来替换目标内容,该如何实现呢?

#这种写法肯定是会报错的,因为变量值填充后会是sed -i "s/{path}//opt/test/g" ./test.txt
sed -i "s/{path}/$path/g" ./test.txt

正确的做法是:
#对path做转换,实现自动转义/字符
path=${path//\//\\\/}
#然后再使用sed进行文本替换
sed -i "s/{path}/$path/g"

注意:
在shell脚本中定义变量时,禁止定义变量名为PATH的变量,否则会跟系统的PATH变量冲突,会覆盖系统的PATH变量,导致执行过程出现一系列的问题。