Shell 算术:引用不带前导 $ 的变量

Shell 算术:引用不带前导 $ 的变量

我很惊讶地在 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。

相关内容