Argument string to integer in bash
Trying to figure out how to convert an argument to an integer to perform arithmetic on, and then print it out, say for addOne.sh
.
echo $1 + 1
>>sh addOne.sh 1
prints 1 + 1
Best Answer
In bash one does not convert an argument to integer to perform arithmetic In bash variables are treated according to context as integers or strings
To perform arithmetic, you should invoke the arithmetic expansion operator $((...))
. For example.
$ a=2
$ echo "$a + 1"
2 + 1
$ echo "$(($a + 1))"
3
or generally preferred.
$ echo "$((a + 1))"
3
You should be aware that bash (as opposed to ksh93, zsh or yash) only performs integer arithmetic. If you have floating point numbers (numbers with decimals), then there are other tools to assist. For example, use bc
.
$ b=3.14
$ echo "$(($b + 1))"
bash: 3.14 + 1: syntax error: invalid arithmetic operator (error token is ".14 + 1")
$ echo "$b + 1" | bc -l
4.14
You can also use a shell with floating point arithmetic support instead of bash
zsh> echo $((3.14 + 1))
4.14