简化此代码并使其功能更强大的最佳方法是什么?
QRCode=$(cat /etc/wireguard/qr/client1)
QRCode2=$(cat /etc/wireguard/qr/client2)
QRCode3=$(cat /etc/wireguard/qr/client3)
QRCode4=$(cat /etc/wireguard/qr/client4)
QRCode5=$(cat /etc/wireguard/qr/client5)
我想将其设置为一个循环,然后可以将其更改为任意数量,以构建所需数量的客户端。下面是尝试,但没有成功。
# Change Clients variable to create different amounts of qr codes
clients=10
counter=1
while [ $counter -le $clients ]
do
QRCode${counter}=$(cat /etc/wireguard/qr/client${counter})
((counter++))
done
根据文件(client1、client2、client3)产生 10 个不同的变量(QRCode1、QRCode2、QRCode3)和 10 个不同的值。
答案1
我会使用数组而不是单个变量,知道有多少个文件:
declare -a QRCodes
for i in {1..10}; do
QRCodes[$i]="$(cat /etc/wireguard/qr/client$i)"
done
然后检索特定值:
$ echo "${QRCodes[1]}"
<some value from client1 file>
要检索所有值:
printf "%s\n" "${QRCodes[@]}"
答案2
您可以使用一个简单的for
循环作为
beg=1
end=5
for i in $(seq $beg $end)
do
QRCode[$i]=$(cat /etc/wireguard/qr/client$i)
done
这将创建一个 bash 数组,您可以通过 访问i
该元素$QRCode[$i]
或整个数组${QRCode[*]}
。 bash 中的数组不必从索引 0 开始。