Bash 스크립트의 루프 인덱스에 float 추가

Bash 스크립트의 루프 인덱스에 float 추가

루프 포인트에 부동소수점을 추가하려고 합니다. 내 루프는 비순차적입니다.

j=9.46 
for i in 8.0 7.5 7.0 6.5 ;do
    $i = $i + $j |bc

    echo '$i'

나도 시도했다

ans=$(( x + y ))
k=$[$i+$j]

루프 인덱스에 상수를 추가하고 나중에 스크립트의 명령에서 이를 사용해야 합니다. |bc를 사용하여 출력을 에코할 수 있지만 나중에 스크립트에서 변수로 사용할 수는 없습니다.

답변1

bash(ksh93, zsh 또는 yash와 반대)은 산술 계산에서 부동 소수점 연산을 수행할 수 없지만 항상 부동 소수점 연산을 수행하는 도구를 호출할 수 있습니다. bc임의의 정밀도 계산에 적합하지만 awk배열, 산술 및 루프 작업에 적합하므로 다음은 아마도 더 나은 도구입니다.

awk -v increment=9.46 -- '
  BEGIN {
   for (i = 1; i < ARGC; i++) print ARGV[i] + increment
  }' 8.0 7.5 7.0 6.5

출력됩니다:

17.46
16.96
16.46
15.96

awk기본적으로 정밀도가 6자리인 부동 소수점 숫자가 출력됩니다 . -o OFMT=%.10g예를 들어 10비트 정밀도를 추가합니다 (내부 계산에서는 double일반적으로 64비트 정밀도를 갖는 C 유형 숫자를 사용합니다).

답변2

루프에서 다음과 같이 시도해 보십시오.

i1=$(echo " $i + $j" |bc)
echo "$i1"

첫째, 양쪽에 공백이 없어야 합니다. =
두 번째 작은따옴표는 쉘이 변수의 내용을 해석하는 것을 방지합니다.

관련 정보