всем хорошего дня
после некоторого самостоятельного изучения и экспериментирования, я застрял с возвращением массива из функции, и на всю жизнь не вижу своей ошибки.
короче говоря, то, что это должно / должно сделать, - это использовать функцию, имеющую функцию, которая считывает значения / строки из файла, возвращая массив:
- объявить и массив: клиенты
- назначить возвращаемый массив функции клиентам массива
- отображать массив клиентов
Мне кажется, что функция читает весь файл, а не построчно, таким образом, помещая все строки в одну ячейку в массиве, и я не уверен, как явно отобразить клиентов [0] как этот $(клиентов [0] ]) не в коде bash
Если каким-то образом я делаю что-то неправильно, пожалуйста, укажите это тоже или какие-либо предложения по оптимизации этого тоже
#!/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"
кошка openvpn.log
something
anotherthing
anotherlineoftext
here is one more line
and lastly
one with
a few spaces
nice
ОБНОВЛЕНИЕ для тех, кто хочет увидеть, как я решил это
- объявляя "глобальный" массив с "объявить -a клиентов"
- функция выполняется, добавляя значения ПРЯМО в массив клиентов
чтобы отобразить одну индексную позицию массива, ref. последняя строка кода "echo" $ {клиентов [0]} "" или любое другое число> = 0
рабочий код:
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]}"