내 expr이 인쇄되고 있지만 평가되지는 않습니다.

내 expr이 인쇄되고 있지만 평가되지는 않습니다.

이 스크립트의 코드는 다음과 같습니다.

echo "Years:"
read age
x=`expr $age*365`
echo -e $x

명령줄에서 이 스크립트를 호출할 때의 출력은 다음과 같습니다.

Years: 

(20개 넣었다고 가정)

20*365

평가해 보는 건 어떨까요?

답변1

expr그것은 더 이상 사용되지 않으며 현재는 거의 사용되지 않습니다. 또한 다음과 같은 더 나은 대안에 비해 사용하기가 매우 제한적이고 투박합니다.

  1. 배쉬는정수만이제 산술이 내장되었습니다.

    $ age=20
    $ echo "$((age * 365))"
    7300
    
    $ x=$((age*365))
    $ echo "$x"
    7300
    
  2. bc부동 소수점 연산 의 경우 :

    $ age=20
    $ echo "$age * 365.25" | bc
    7305.00
    

    또는 소수 부분을 제거하려면 다음을 수행하십시오.

    $ echo "scale=0; $age * 365.25/1" | bc
    7305
    

    scale덧셈, 뺄셈, 곱셈 의 설정은 무시되므로 1로 나누어야 합니다 bc. 이는 "고정"될 가능성이 없는 오랜 골치 아픈 문제입니다.

  3. RPN을 선호하는 경우 다음을 사용할 수 있습니다 dc.

    $ age=20
    $ dc -e "$age 365.25 * p" 
    7305.00
    

참고: 백틱은 더 이상 사용되지 않으며 더 이상 사용되지 않습니다. 대신 백틱을 사용하세요 $(...). 예를 들어

x=$(echo "$age * 365.25" | bc)

x=$(dc -e "$age 365.25 * p")

답변2

*특수 문자를 이스케이프 처리 하고 값과 연산자 사이에 공백을 유지 해야 합니다 .

다음과 같이 시도해보세요.

x=`expr $age \* 365`

관련 정보