
私の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"