如何在bash中执行求幂

如何在bash中执行求幂,bash,syntax,operators,Bash,Syntax,Operators,我试着 它打印10**2。如何使其工作?您可以使用: 或: 算术展开的优点是,允许您在不将表达式存储在变量中的情况下执行并仅使用表达式: var=$((10**2)) # sets var to 100. 对于较大的数字,您可能希望使用的是: 如果要将上述结果存储在变量中,可以通过$()语法使用: bash:$ echo 2^100 | bc 1267650600228229401496703205376 或旧的backtick语法: var=$(echo 2^100 | bc) 请注意

我试着

它打印
10**2
。如何使其工作?

您可以使用:

或:

算术展开的优点是,允许您在不将表达式存储在变量中的情况下执行并仅使用表达式:

var=$((10**2))  # sets var to 100.
对于较大的数字,您可能希望使用的是:

如果要将上述结果存储在变量中,可以通过
$()
语法使用:

bash:$ echo 2^100 | bc
1267650600228229401496703205376
或旧的backtick语法:

var=$(echo 2^100 | bc)
请注意,命令替换与算术展开不同:

var=`echo 2^100 | bc`
各种方式:

实际上,
var=$((echo 2^100 | bc))
不起作用-bash正在尝试在
(())
内部进行计算。但是 相反,命令行序列存在,因此它会创建一个错误

var=$(echo 2^100 | bc)
工作,因为值是内部执行命令行的结果
()

代替
$(…)
也可以使用
$[…]
。我觉得后者在视觉上更吸引人,但那正是我的口味。不过,我不知道这两者之间是否有任何区别。Alberto:所有这些括号、let和$都是必需的,因为bash是一个简单的命令行解释器,如果所有内容都是字符串,那么就应该这样处理,除非另有明确指示。萨卢多斯@DarkDust
$[…]
是一种较旧的不推荐使用的语法。注意:
$(…)
不起作用。相反,必须使用
$(…)
。请参阅下面的@firefly。@WrichikBasu我提交了一个编辑;现在已经修好了。这非常有帮助。你应该把它作为对上面答案的评论。顺便说一句,好的;另一个被接受的命令遵循
$(…)
模式(,源代码高级Bash脚本指南,“允许算术扩展和求值”)。这里,正如您所注意到的,我们需要命令替换,即
$(…)
构造。ABS指南“The
$(…)
已取代反勾号”。《Bash初学者指南》中,两篇文章都是紧靠在一起描述的。
bash:$ echo 2^100 | bc
1267650600228229401496703205376
var=$(echo 2^100 | bc)
var=`echo 2^100 | bc`
$(( )) # arithmetic expansion
$( )   # command substitution
echo $((10**2))
awk 'BEGIN{print 10^2}'  # POSIX standard
awk 'BEGIN{print 10**2}' # GNU awk extension
echo '10 ^ 2' | bc
dc -e '10 2 ^ p'