巴什 - 替换转义字符

问题描述:

我不得不全部更换斜线,antislashes,单引号和双引号中的变量,可能在传球,用自己逃脱版本:巴什 - 替换转义字符

' --> \' 
" --> \" 
\ --> \\ 
/--> \/ 

在这一点上,我用这个来替换单引号:

${MYVAR//\'/\\\'} 

但我stucked当我试图取代斜线,antislashes,单引号和双引号的一个通行证。

+0

如果你想逃避用作外壳输入一个字符串,你可以尝试['printf的 '%Q' “$ MYVAR”'](https://开头计算器。 com/questions/40573839/how-to-use-printf-q-in-bash)(如果你的bash支持的话)。 –

+0

它适用于Synology NAS脚本:我必须使用PHP引擎通过邮件发送bash变量的值。当然,PHP会使用嵌套引号返回错误。 – Zax

你可以使用SED替代:

echo "'\"\\/" | sed "s~\(['\"\/]\)~\\\\\1~g" 

编辑根据注释:

EXPLORE_FOLDER="/volume1/video/myMovies" 
LS_LIST="$(ls --recursive "$EXPLORE_FOLDER")" 
RESULT="$(sed "s~\(['\"\/]\)~\\\\\1~g" <<<"$LS_LIST")" 
echo "$RESULT" 

或者只是:

EXPLORE_FOLDER="/volume1/video/myMovies" 
RESULT="$(ls --recursive "$EXPLORE_FOLDER" | sed "s~\(['\"\/]\)~\\\\\1~g" <<<"$LS_LIST")" 
echo "$RESULT" 
+0

感谢Pavel,但我是一个完全新手...... MYVAR在你的sed解决方案中在哪里? – Zax

+0

@Zax像这样:'echo“$ MYVAR”| sed ...' –

+0

或者更好的是,使用[herestring](https://unix.stackexchange.com/questions/76402/command-line-instead-of)避免创建不必要的进程:'sed ...