Другая форма целочисленных математических выражений в Bash помещает двойные скобки снаружи всего выражения для операций присваивания:
(( var = i ** 2 ))
(( i++ ))
(( position += delta ))
Как видите, знаки доллара здесь не нужны (ни внутри $(())
). Также разрешены пробелы вокруг знака равенства.
Также эту форму можно использовать в условных выражениях:
sixpacks=8 # note spaces not allowed here
(( beerprice = 8 )) # but you can use spaces this way
budget=50
# you can do assignments inside a conditional just like C
until (( (( beertotal = sixpacks * beerprice )) <= budget ))
do
(( sixpacks-- ))
done
echo "Buy ${sixpacks} six-packs at \$${beerprice} each for a total of \$${beertotal}."
Или вы можете заменить все это на это, конечно:
beerprice=8
budget=50
# integer division
(( sixpacks = budget / beerprice ))
(( beertotal = sixpacks * beerprice ))
echo "Buy ${sixpacks} six-packs at \$${beerprice} each for a total of \$${beertotal}."
Bash также имеет выражение let
:
let a=2**16
let 'a>>=1' # bitwise shift - some operations need to be quoted or escaped
(( a>>=1 )) # but not inside (())