산술 문제가 있는 간단한 쉘 스크립트... ** 문제가 발생함

산술 문제가 있는 간단한 쉘 스크립트... ** 문제가 발생함

이 스크립트를 실행하면 다음 오류가 발생합니다.

./myscript.sh: 16: 산술 표현식: 예상되는 기본 값: "1 ** 1"

첫 번째 줄에 표시된 대로 bash를 사용하여 이 쉘 스크립트를 실행하면 #! /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

답변1

표준 쉘 연산정수 산술 연산만 허용됩니다. 여기에는 **bash의 확장 지수가 포함되지 않습니다 .

정수 지수화는 쉘 함수로 쉽게 구현됩니다(비록 곧 랩어라운드를 접하게 되겠지만).

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

그런데 expr여기서는 왜 사용되는 걸까요? 쉘 연산은 덧셈을 할 수 있습니다.

답변2

**지수 연산자가 아니기 때문에 운이 좋지 않은 것 같습니다./bin/sh의 표준. bc그러나 다음을 사용할 수 있습니다 echo "$y ^ $x" | bc.

답변3

POSIX 쉘에는 지수 연산자가 없는 것 같습니다. 직접 출시할 수 있습니다.

pow() {
    local x y res i
    x=$1
    y=$2
    res=1
    i=1
    while [ $i -le $y ]; do
        res=$(( res * x ))
        i=$(( i + 1 ))
    done
    echo $res
}

x=1
while [ $x -le 10 ]; do
    y=1
    while [ $y -le 10 ]; do
        echo "$(pow $y $x)   \c"
        y=$(( y + 1 ))
    done
    echo
    x=$(( x + 1 ))
done

관련 정보