ksh에서 두 개의 음수를 빼는 중 오류: "할당에는 lvalue가 필요합니다."

ksh에서 두 개의 음수를 빼는 중 오류: "할당에는 lvalue가 필요합니다."

다른 사람의 스크립트를 디버깅하려고 합니다.

코드 줄은 다음과 같습니다.

y=$((${oldvalue[$x]}-${newvalue[$x]}))

y양쪽이 양수이면 계산이 제대로 작동합니다. 그러나 내가 가진 생산 상황은 모두 음수이며 내가 얻는 오류는 다음과 같습니다.

DEBUG Old value = -4144290000
DEBUG New value = -4009685000
script.sh: line 123: -4144290000--4009685000: assignment requires lvalue

나는 가장 간단한 계산조차 하는 데에는 결코 자신을 사용하지 않을 것이지만 ksh, 생산 지원 위치에 있고 큰 진흙 덩어리를 처리해야 한다면 적어도 Perl/Python을 사용할 것입니다. 이 문제가 발생하는 이유와 해결 방법을 알려줄 수 있는 사람이 있나요?

답변1

이 구문을 사용하면 $xxx변수가 확장되고 결과가 산술 표현식으로 평가됩니다.

그래서,

y=$((${oldvalue[$x]}-${newvalue[$x]}))

~이 되다

y=$((-4144290000--4009685000))

그리고 ksh예상치 못한 --운영자에 대해 불평하십시오.

공백을 추가하여 이 문제를 해결할 수 있습니다. 이 경우 다음과 같습니다.

y=$((-4144290000 - -4009685000))

그러나 다음과 같이 작성할 수도 있습니다.

y=$((oldvalue[$x]-newvalue[$x])))

이 경우 변수의 내용은 산술 평가의 일부로 확장되며, 이 경우에는 숫자 값으로 확장됩니다.

다음 상황에서는 차이가 더욱 중요해집니다.

a=1+1 b=2
echo "$((a*b)) vs $(($a*$b))"

이는 4 vs 3첫 번째 방법보다 문제를 해결하는 세 번째이자 더 강력한 방법을 가리킵니다.

y=$(((${oldvalue[$x]}) - (${newvalue[$x]})))

답변2

빼기 기호 양쪽에는 공백이 필요합니다.

y=$((${oldvalue[$x]} - ${newvalue[$x]}))

관련 정보