我在 shell 脚本中运行指数运算符时遇到问题
#!/bin/bash
clear
number1=8
number2=2
sum1=$(( number1 ** number2 ))
echo "8 ^ 2 =" $sum1
它返回expecting primary: " number1 ** number2 "
我也尝试过^
,**
但仍然没有打印出所需的结果,8^2 返回 64。我一定是错过了一些东西,我只是不明白什么。
任何提示都会很棒,谢谢。
答案1
您似乎正在dash
shell 中运行该脚本。
您引用的错误消息是dash
当它无法理解**
运算符(dash
没有)时输出的内容。如果你尝试用什么东西来乘以什么,这和你得到的错误是一样的:
$ echo $(( 2 * ))
dash: 14: arithmetic expression: expecting primary: " 2 * "
确保您直接执行脚本(#!
毕竟它具有正确的行),或者通过使用以下命令显式调用它bash
:
$ bash script.sh
答案2
GNU bash,版本 4.1.2(1)-发布 (x86_64-redhat-linux-gnu)
这效果很好。这是完整的脚本:
#!/usr/bin/env bash
clear
number1=8
number2=2
printf 'The sum of %d and %d = %d\n' $number1 $number2 $(( number1 ** number2))
你只需使用chmod +x filename; ./filename
如果您使用其他 shell,您可能需要指向解释器,并以正确的方式运行。
顺便提一句。更喜欢使用printf
比echo