我很惊讶地在 Bash 手册中读到这一点,描述了算术评估:
在表达式中,shell 变量也可以通过名称引用,而不使用参数扩展语法。
我尝试了一下,确实,var
行为与以下相同$var
:
❯ var=9
❯ echo $(( var + 5 ))
14
❯ (( var < 10 )) && echo 'single digits!'
single digits!
这样做是否被认为是不好的做法?它是否可以移植到其他 shell,或者这是一种 Bashism?
答案1
$
在算术求值中不使用变量并不被认为是不好的做法。就可移植性而言,((…))
一般不是 POSIX,因此它无法在 dash 等 shell 中工作。它将在 zsh 和 ksh 中工作。另一方面,$((…))
它在 POSIX 中并且适用于所有现代 sh 风格的 shell。