dobrego dnia wszystkim
po pewnym czasie samodzielnego studiowania i eksperymentowania, utknąłem w zwróceniu tablicy z funkcji i przez całe życie nie widzę mojego błędu.
w skrócie, to, co należy / należy zrobić, to użyć funkcji, która odczytuje wartości / ciągi z pliku, zwracając tablicę:
- deklaruj i tablica: klienci
- przypisz tablicę zwrotną funkcji do klientów tablicy
- wyświetlać tablice klientów
Wydaje mi się, że funkcja odczytuje cały plik, a nie wiersz po wierszu, w ten sposób umieszczając wszystkie ciągi w jednej komórce w tablicy, i nie jestem pewien, jak jawnie wyświetlić klientów [0] jako te $ (klienci [0 ]) kończy się niepowodzeniem w kodzie bash
Jeśli w jakiś sposób robię coś niepoprawnie, proszę wskazać to również lub sugestie dotyczące optymalizacji tego
#!/bin/bash
readArray(){
local array=()
local i=0;
local j=0
while IFS= read -r LINE && [[ -n "$LINE" ]] ; do
array[$((i++))]+=${LINE}; # Append line to the array
((j++))
done < "$1";
rtr=${array[@]}
}
string="/home/cybex/openvpntest/openvpn.log"
declare -a clients
#sed -i '/^$/d' $string
clients=$(readArray "$string")
echo "${clients[@]}"
echo -e "array not empty, displaying array contents\n"
for i in "${!clients[@]}"; do
echo "$i: ${clients[$i]}"
done
echo -e "\nfinished displaying contents of array"
kot openvpn.log
something
anotherthing
anotherlineoftext
here is one more line
and lastly
one with
a few spaces
nice
AKTUALIZACJA dla każdego, kto chce zobaczyć, jak to rozwiązałem
- deklarowanie „globalnej” tablicy za pomocą „deklaruj -a klientów”
- funkcja jest wykonywana, dodając wartości BEZPOŚREDNIO do tablicy klientów
aby wyświetlić pojedynczą pozycję indeksu tablicy, zob. ostatni wiersz kodu „echo” $ {klienci [0]} ”” lub dowolny inny numer> = 0
działający kod:
declare -a clients
readArray(){
local array=()
local i=0;
local j=0
while IFS= read -r LINE && [[ -n "$LINE" ]] ; do
clients[$((i++))]+=${LINE}; # Append line to the array
((j++))
done < "$1";
}
string="/home/cybex/openvpntest/openvpn.log"
sed -i '/^$/d' $string
readArray "$string"
echo "${clients[@]}"
echo -e "array not empty, displaying array contents\n"
for i in "${!clients[@]}"; do
echo "$i: ${clients[$i]}"
done
echo -e "\nfinished displaying contents of array"
echo "${clients[0]}"