이 스크립트를 실행하면 다음 오류가 발생합니다.
./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