巴什 - 替换转义字符
我不得不全部更换斜线,antislashes,单引号和双引号中的变量,可能在传球,用自己逃脱版本:巴什 - 替换转义字符
' --> \'
" --> \"
\ --> \\
/--> \/
在这一点上,我用这个来替换单引号:
${MYVAR//\'/\\\'}
但我stucked当我试图取代斜线,antislashes,单引号和双引号的一个通行证。
你可以使用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"
感谢Pavel,但我是一个完全新手...... MYVAR在你的sed解决方案中在哪里? – Zax
@Zax像这样:'echo“$ MYVAR”| sed ...' –
或者更好的是,使用[herestring](https://unix.stackexchange.com/questions/76402/command-line-instead-of)避免创建不必要的进程:'sed ...
如果你想逃避用作外壳输入一个字符串,你可以尝试['printf的 '%Q' “$ MYVAR”'](https://开头计算器。 com/questions/40573839/how-to-use-printf-q-in-bash)(如果你的bash支持的话)。 –
它适用于Synology NAS脚本:我必须使用PHP引擎通过邮件发送bash变量的值。当然,PHP会使用嵌套引号返回错误。 – Zax