如何在bash中的用户输入变量中转义正斜杠?

时间:2012-10-19 00:45:35

标签: bash variables escaping user-input

我正在制作一个脚本,以便更有效地设置Statamic网站。我遇到的问题是我用来替换文件中的字符串的变量具有未转义的正斜杠并且是用户输入。如何确保_site_url: http://statamic.com成为_site_url: http://example.com

只要没有正斜杠,下面的代码就会起作用。

echo "What's your site URL? Don't forget the protocol (ex. http://)!"
read -e SITE_URL

echo "%s/_site_url: http:\/\/statamic.com/_site_url: $SITE_URL/g
w
q
" | ex _config/settings.yaml

2 个答案:

答案 0 :(得分:4)

由于您特意提到bash而不是Bourne shell或通用Unix shell,我建议使用Bash的内置搜索/替换功能:

echo "What's your site URL? Don't forget the protocol (ex. http://)!"
read -e SITE_URL

echo Escaped URL: ${SITE_URL//\//\\\/}

答案 1 :(得分:2)

问题是ex命令中的分隔符。我们可以放任何我们想要的东西,我在这里使用@

尝试这样做:

 sed -i "s@_site_url: http://statamic.com/_site_url: $SITE_URL@g" _config/settings.yaml

或使用ex命令:

echo "What's your site URL? Don't forget the protocol (ex. http://)!"
read -e SITE_URL

echo "%s@_site_url: http://statamic.com@_site_url: $SITE_URL@g
w
q
" | ex _config/settings.yaml