1

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?

1
  • 2
    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, 2011 at 9:56

3 Answers 3

5

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" == "*" ]
1
  • 5
    Oh good. For a moment I thought I'd need to beat someone over the head with the BASH FAQ. Nov 25, 2011 at 1:55
2

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.

0

Find ASCII value of * by using the command below

printf "%d\n" "'`echo "*" | awk '{print $1}'`"

and use that value for condition checking.

1
  • Unfortunately you do not say how to use the ASCII value for the condition checking. Oct 10, 2013 at 17:47

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .