#!/bin/bash 인덱스

#!/bin/bash 인덱스

쉘 스크립트에서 지수 연산자를 실행하는 데 문제가 있습니다.

#!/bin/bash
clear

number1=8
number2=2

sum1=$(( number1 ** number2 ))

echo "8 ^ 2 =" $sum1

그것은 돌아온다expecting primary: " number1 ** number2 "

나는 또한 그것을 시도했지만 ^여전히 **원하는 결과를 인쇄하지 못했습니다. 8^2는 64를 반환했습니다. 뭔가 빠진 게 틀림없어요. 무엇을 이해하지 못하겠어요.

어떤 조언이라도 좋을 것입니다. 감사합니다.

답변1

dash쉘에서 스크립트를 실행 중인 것 같습니다 .

인용한 오류 메시지는 연산자를 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

다른 쉘을 사용하는 경우 인터프리터를 가리키고 올바른 방식으로 실행해야 할 수도 있습니다.

그런데. printf것보다 사용하는 것을 선호함echo

관련 정보