Bash-当我试图获得16的平方时,这是错误的

tia*_*jin 5 bash shell

我是bash的初学者.我写了一个脚本来计算num的平方.当num不小于16时,它是错误的... shell没有short或long类型.那么shell中最大的数字是多少?

1--1
2--4
3--9
::::
15-225
16-0
17-33
18-68
Run Code Online (Sandbox Code Playgroud)

代码是:

#!/bin/bash
square() {
        let "res=$1*$1"
        return $res
}
as=16
square $as
result=$?
echo $result
exit 0
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 16

进程的返回码被限制为8位(其余的位有元信息,如"有核心转储吗?"和"信号是否会终止进程?"),所以你将无法用它来获得大于255的值.

所以所有的值都是模256.

16^2 = 256 % 256 = 0
17^2 = 289 % 256 = 33
18^2 = 324 % 256 = 68
:
22^2 = 484 % 256 = 228
23^2 = 529 % 256 = 17
Run Code Online (Sandbox Code Playgroud)

相反,尝试捕获输出而不是返回代码:

#!/bin/bash
square() {
        let "res=$1*$1"
        echo $res        # echo answer rather than return
}
as=16
result=$(square $as)     # capture echo rather than $?
echo $result
exit 0
Run Code Online (Sandbox Code Playgroud)