이 코드를 단순화하고 더욱 강력하게 만드는 가장 좋은 방법은 무엇입니까?
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
i
그러면 요소 $QRCode[$i]
또는 전체 배열 에 액세스하여 액세스할 수 있는 bash 배열이 생성됩니다 ${QRCode[*]}
. Bash의 배열은 인덱스 0에서 시작할 필요가 없습니다.