루프를 사용하여 동적으로 변수를 생성하는 방법

루프를 사용하여 동적으로 변수를 생성하는 방법

내 Bash 스크립트에 다음 코드가 있습니다

d1=$(($t1-$t0))
d2=$(($t2-$t1))
d3=$(($t3-$t2))
d4=$(($t4-$t3))
d5=$(($t5-$t4))
d6=$(($t6-$t5))
d7=$(($t7-$t6))
d8=$(($t8-$t7))

이것이 계속되면 d=100분명히 루프를 사용하여 이러한 변수 행을 생성해야 합니다.

값이 올바르게 생성되고 평가되도록
for i in {1..n}; do done루프 를 사용하여 이 코드를 동적으로 생성하려면 어떻게 해야 합니까 ?
d1d100

예를 들어, 루프를 실행하기 전의 입력, t0=6; t1=10, t2=20
루프를 실행한 후의 출력은
echo $d1
4
echo $d2
10 입니다.

?

답변1

때를할 수 있는요청한 대로 수행하면 코드가 불필요하게 복잡해지고 유지 관리가 어려워집니다. 나는 이 대안을 제안합니다:

#!/bin/bash

tArray=( 6 10 20 )

for((i=0; i<${#tArray[@]} -1; i++));
do
  dArray[i]=$((tArray[i+1] - tArray[i]))
done

for((i=0; i<${#dArray[@]}; i++));
do
  echo "${tArray[i+1]} - ${tArray[i]} = ${dArray[i]}"
done

실행 결과:

$ foo.sh
10 - 6 = 4
20 - 10 = 10

참고로 독창적인 아이디어를 활용하는 방법은 다음과 같습니다.

#!/bin/bash

t0=6
t1=10
t2=20

for i in {0..1}; do
  tVarName1=t${i}
  tVarName2=t$((i+1))
  dVarname=d${i}
  eval "$dVarname=$(( ${!tVarName2} - ${!tVarName1} ))"
done

echo "D0: $d0"
echo "D1: $d1"

관련 정보