我尝试过
echo 10**2
如何计算正确结果100,使其打印出10 ** 2
let
原生函数:let var=10**2 # sets var to 100.
echo $var # prints 100
var=$((10**2)) # sets var to 100.
echo $((10**2)) # prints 100.
对于大数字,您可能希望使用外部命令bc
的指数运算符,如下所示:
bash:$ echo 2^100 | bc
1267650600228229401496703205376
$()
语法来实现:var=$(echo 2^100 | bc)
var=`echo 2^100 | bc`
$(( )) # arithmetic expansion
$( ) # command substitution
实际上,var=$((echo 2^100 | bc))
是无法工作的 - bash 在 (())
中尝试进行数学运算。但是,命令行序列在这里代替了它,因此会创建一个错误。
var=$(echo 2^100 | bc)
可以工作,因为该值是在 ()
内执行的命令行的结果。
$((...))
模式(双括号结构,允许算术扩展和评估)。正如你所指出的,这里我们需要使用命令替换,即$(...)
结构。ABS指南指出:“$(...)
已经取代了反引号”。Bash初学者指南第3.4.5-6节将两者描述在一起。 - bballdave025
$((...))
之外,也可以使用$[...]
。我认为后者在视觉上更加吸引人,但这只是我的个人口味。不知道两者之间是否有任何区别,不过它们似乎表现相同。 - DarkDust$[...]
是一种较旧的已弃用语法。https://unix.stackexchange.com/questions/209833/what-does-a-dollar-sign-followed-by-a-square-bracket-mean-in-bash - wisbucky$(( ... ))
不起作用。必须使用$( ... )
。请参见 @firefly 的 答案。 - Wrichik Basu