When pre/post incrementing a variable, in POSIX Shell, what is the difference between these two examples. They seem like they would have the same consequences, but would they be used differently? When would you prefer one over the other?
X=$((X+1))
: $((X=X+1))
Best Answer
In your first example,
$((X+1))
evaluates the expression X + 1 and expands to the result, which is then asigned to the variable.In the second example,
$((X=X+1))
incrementsX
by one ($((X++))
is also valid and shorter, but not necessarily supported by the shell), then expands to the new value of$X
, which is the first argument to the null command,:
. The null command ignores its arguments, and the result is discarded (with side effects).I would personally prefer the first form because of three (relatively subjective) reasons:
You'd have to use the first version if you were modifying the environment of just one command like
You'd have to use the second form to add evaluation to arguments directly:
This has the desired side effects, saves one line, and is pretty clear.