![Shell 算术:引用不带前导 $ 的变量](https://linux22.com/image/113325/Shell%20%E7%AE%97%E6%9C%AF%EF%BC%9A%E5%BC%95%E7%94%A8%E4%B8%8D%E5%B8%A6%E5%89%8D%E5%AF%BC%20%24%20%E7%9A%84%E5%8F%98%E9%87%8F.png)
我很惊讶地在 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。