String 转义前斜杠内部shell变量值
我正在使用bashshell脚本来执行某些模式替换。 模式替换使用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
sed
命令将一个值替换为另一个值
sed/s/abc/$var/g
外壳变量var
包含外壳变量中的路径值,
e、 gvar=“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
命令中作为分隔符。