![내 expr이 인쇄되고 있지만 평가되지는 않습니다.](https://linux55.com/image/161249/%EB%82%B4%20expr%EC%9D%B4%20%EC%9D%B8%EC%87%84%EB%90%98%EA%B3%A0%20%EC%9E%88%EC%A7%80%EB%A7%8C%20%ED%8F%89%EA%B0%80%EB%90%98%EC%A7%80%EB%8A%94%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
이 스크립트의 코드는 다음과 같습니다.
echo "Years:"
read age
x=`expr $age*365`
echo -e $x
명령줄에서 이 스크립트를 호출할 때의 출력은 다음과 같습니다.
Years:
(20개 넣었다고 가정)
20*365
평가해 보는 건 어떨까요?
답변1
expr
그것은 더 이상 사용되지 않으며 현재는 거의 사용되지 않습니다. 또한 다음과 같은 더 나은 대안에 비해 사용하기가 매우 제한적이고 투박합니다.
배쉬는정수만이제 산술이 내장되었습니다.
$ age=20 $ echo "$((age * 365))" 7300 $ x=$((age*365)) $ echo "$x" 7300
bc
부동 소수점 연산 의 경우 :$ age=20 $ echo "$age * 365.25" | bc 7305.00
또는 소수 부분을 제거하려면 다음을 수행하십시오.
$ echo "scale=0; $age * 365.25/1" | bc 7305
scale
덧셈, 뺄셈, 곱셈 의 설정은 무시되므로 1로 나누어야 합니다bc
. 이는 "고정"될 가능성이 없는 오랜 골치 아픈 문제입니다.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`