带有算术问题的简单 Shell 脚本...... ** 给我带来了麻烦

whu*_*739 6 shell bash shell-script

当我运行此脚本时,出现此错误:

./myscript.sh: 16: 算术表达式: 期望主: "1 ** 1"

当我用 bash 运行这个 shell 脚本时,就像#! /bin/bash第一行一样,数学正常工作;不幸的是,我需要使用/bin/sh. 我究竟做错了什么?如果这很重要,我在 Linux Mint 上。

#! /bin/sh

x=1
while [ $x -le 10 ]
do
    y=1
    while [ $y -le 10 ]
    do
        echo $(($y ** $x))"   \c"
        y=`expr $y \+ 1`
    done
    echo
    x=`expr $x \+ 1`
done
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 6

标准外壳算术只允许整数算术运算。这不包括**求幂,bash 将其作为扩展。

整数取幂很容易实现为 shell 函数(尽管您很快就会遇到环绕)。

pow () {
    set $1 $2 1
    while [ $2 -gt 0 ]; do
      set $1 $(($2-1)) $(($1*$3))
    done
    echo $3
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,为什么expr在这里使用?Shell 算法可以做加法。