쉘 스크립트에서 지수 연산자를 실행하는 데 문제가 있습니다.
#!/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