Curtis Blackwell
Curtis Blackwell

Reputation: 3207

How can I escape forward slashes in a user input variable in bash?

I'm working on a script to make setting up a Statamic site more efficient. The problem I'm running into is that the variable I'm using to replace a string in a file has unescaped forward slashes and is user input. How can I make sure that _site_url: http://statamic.com will become _site_url: http://example.com?

The code below will work as long as there are no forward slashes present.

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

Upvotes: 6

Views: 11286

Answers (2)

Christopher Smith
Christopher Smith

Reputation: 5542

Since you specifically mentioned bash instead of Bourne shell or generic Unix shell, I'd recommend using Bash's built in search/replace feature:

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

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

Upvotes: 8

Gilles Quénot
Gilles Quénot

Reputation: 185073

The problem is the delimiter in your ex command. We can put anything we'd like instead, I use @ here :

Try doing this :

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

Or with your ex command :

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

Upvotes: 2

Related Questions