![如何使用循环动态创建变量](https://linux22.com/image/192464/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%BE%AA%E7%8E%AF%E5%8A%A8%E6%80%81%E5%88%9B%E5%BB%BA%E5%8F%98%E9%87%8F.png)
我的 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
以便
正确生成并评估值d1
?d100
例如,运行循环之前的输入,
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"