I'm making a bash script to do basic arthmetic and when I do:

if [ $2 == "*" ]

it does not work.

How can I check for asterisk?

link|improve this question

57% accept rate
Unix Philosophy 102: Let the shell do what the shell does best, and use bc or dc if you want a calculator. – JdeBP Nov 25 '11 at 9:56
feedback

2 Answers

You need to escape or quote the asterisk in the command line:

./calculator.sh 2 \* 2
./calculator.sh 2 '*' 2

and enclose the $2 in double quotes:

if [ "$2" == "*" ]
link|improve this answer
3  
Oh good. For a moment I thought I'd need to beat someone over the head with the BASH FAQ. – Ignacio Vazquez-Abrams Nov 25 '11 at 1:55
feedback

The problem isn't that the if statement isn't working, it is that the asterisk on the command line is being globbed.

So if your script was called mycalc and run from the command line you do

mycalc 2 * 3

The * will get globbed, and converted to all the names of the files in the current folder.

To avoid expansion, you would need to do

mycalc 2 \* 3

The \ escapes the asterisk and passes it through without changing it.

You might want to consider x for the multiplication operation to avoid this.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.