Importance of quotes in Terminal - Akash Trehan

Importance of quotes in Terminal

I was tinkering with the echo command when I came across the difference between using echo '...' and echo "...".

This can best be explained using some examples.

NO QUOTES

echo test ~/*.txt {code,maxx} $(echo foo) $((2+2)) $USER `echo bar` \$100

This is without any quotes. I have also added some cool things to be echoed which I’ll explain alongside. This gave the follwing output:

test /Users/akash/test1.txt /Users/akash/test1.txt code maxx foo 4 akash bar

So we see some of the commands got expanded:

~/*.txt - Gets expanded to a list of all files with the extension .txt and present in the home directory.
{code,maxx} - This is the list I was talking about above. What echo does is print each member of that list with a space in between.
` echo bar ` - The backticks cause this command to be executes before the outer echo. It is like nested parenthesis.(2*(8/4))
$USER - This is an environment variable which stores the username of the current user.(akash in my case)
$(echo foo) - Dollar sign followed by single parenthesis means run whatever is inside the parentheses in a subshell and return that as the value. In my example, you would get foo since echo will write foo to standard out. This is an alternative to the ` echo bar ` above.
$((2+2)) - Dollar sign followed by double parenthesis means perform arithmetic and return the result of the calculation.
\$100 - As you might already know this is backslashing $ so as to print it as is.

Ok so that was some nice stuff. Now lets move on to the quotes.

DOUBLE QUOTES

echo "test ~/*.txt {code,maxx} $(echo foo) $((2+2)) $USER `echo bar` \$100"
test ~/*.txt {code,maxx} foo 4 akash bar $100

Now we see some expansions were restricted. With double qoutes all the special characters(like *) lose their meaning except:

SINGLE QUOTES

echo 'test ~/*.txt {code,maxx} $(echo foo) $((2+2)) $USER `echo bar` \$100'
test ~/*.txt {code,maxx} $(echo foo) $((2+2)) $USER `echo bar` \$100

We see that using single quotes prevents all expansions. ALL special characters lose thier meaning! This is why it is recommended to use single quotes while writing aliases so that we can put the exact input in it and we don’t have to worry about it being modified while substitution.

Hope this helped :) In case you have any doubts comment below. If you are an Infosec person, don’t forget to checkout my Write-ups

Follow @CodeMaxx
wptview
Akash Trehan

Akash Trehan

Hacker-Developer-Geek

comments powered by Disqus
rss facebook twitter github youtube mail spotify instagram linkedin google pinterest medium