String 转义前斜杠内部shell变量值

String 转义前斜杠内部shell变量值,string,bash,shell,sed,String,Bash,Shell,Sed,我正在使用bashshell脚本来执行某些模式替换。 模式替换使用sed命令将一个值替换为另一个值 sed/s/abc/$var/g 外壳变量var包含外壳变量中的路径值, e、 gvar=“dir/abc.txt” 如果shell变量具有此值,则会导致sed出现问题 我们的想法是这样替换路径 var="dir\/abc.txt" 我正在使用下面的函数来做同样的事情。此函数通过字符串逐个字符进行迭代 并将/替换为\/ # This function takes a string and

我正在使用bashshell脚本来执行某些模式替换。 模式替换使用
sed
命令将一个值替换为另一个值

sed/s/abc/$var/g 
外壳变量
var
包含外壳变量中的路径值, e、 g
var=“dir/abc.txt”

如果shell变量具有此值,则会导致
sed
出现问题

我们的想法是这样替换路径

var="dir\/abc.txt"
我正在使用下面的函数来做同样的事情。此函数通过字符串逐个字符进行迭代 并将
/
替换为
\/

  # This function takes a string and scans for forward slash
    # If forward slash is found , it will replace with escape char.
    # input = "dir/abc.txt
    # output ="dir\/abc.txt
    handle_escape_chars()
    {  
       RETURN_VAL=""
       fileName=$1
       for i in $(seq 1 ${#fileName}); do
          #echo "${fileName:i-1:1}"
          z="${fileName:i-1:1}"
          if [ $z == "/" ];
          then
            z="\/"
          fi
          RETURN_VAL="${RETURN_VAL}${z}"
       done 
       echo $RETURN_VAL
       return
    }
已经尝试使用另一种替代方案,但这不起作用

fileName="dir/abc.txt"
printf "%q\n" "$fileName"

为什么不将
sed
中的分隔符从
/
更改为
是。谢谢@Inian。是否也有转义shell变量中字符的解决方案?您可以使用参数扩展转义所有反斜杠:
${fileName/\/\/\\\/}
@Aaron的答案很好,但最后一个反斜杠没有用。@Diablotin true,我可能逃过了最后一个斜杠,因为我习惯了它们在
sed
命令中作为分隔符。