Recently a colleague of mine recommended using the let keyword in shell scripts to perform arithmetic evaluation. That prompted me to write this post about the let keyword.
Here is what the bash manpage says about the let keyword:
let arg [arg ...] Each arg is an arithmetic expression to be evaluated. If the last arg evaluates to 0, let returns 1; 0 is returned otherwise.
And here is a simple example of it’s use:
$ a=2 $ b=5 $ let c=$a+$b $ echo $c 7 $ let c=$a + $b $ echo $c 2
As you can see from the above, you cannot have any spaces in arguments.
Here is what ksh93 says about the let keyword:
$ let --man let evaluates each expr in the current shell environment as an arithmetic expression using ANSI C syntax. Variables names are shell variables and they are recursively evaluated as arithmetic expressions to get numerical values. let has been made obsolete by the ((...)) syntax of ksh(1) which does not require quoting of the operators to pass them as command arguments
By the way, in case you are unaware of it, Korn Shell 93 keywords have built in manpages which are viewed using the –man option as show above.
Here is how to to write the previous example using modern syntax:
$ a=2 $ b=5 $ c=$((a + b)) $ echo $c 7
My advise to you – stop using the let. keyword when writing shell scripts. Use the modern syntax. It will make your shell scripts easier to read and understand.