bom dia tudo
Depois de um pouco de auto-estudo bash e expermenting, eu estou preso em retornar uma matriz de uma função, e para a vida de mim não pode ver o meu erro.
em resumo, o que isto deve / deve fazer é usar uma função
tem uma função que lê valores / strings de um arquivo, retornando uma matriz:
- declarar e matriz: clientes
- atribui a matriz de retorno da função aos clientes da matriz
- exibir clientes de matriz
Parece-me que a função lê o arquivo inteiro e não linha por linha, colocando assim todas as strings em uma única célula na matriz, e não sei como exibir explicitamente clientes [0] como este $ ( clientes [0]) falha no código bash
Se, de alguma forma, eu estiver fazendo algo incorretamente, indique isso também ou sugestões para otimizar isso também
#!/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"
cat openvpn.log
something
anotherthing
anotherlineoftext
here is one more line
and lastly
one with
a few spaces
nice
UPDATE
para quem quiser ver como resolvi isso
- declarando uma matriz "global" com "declare -a clients"
A função - é executada, adicionando valores DIRETAMENTE à matriz de clientes
para exibir uma única posição de índice de uma matriz, ref. última linha de código "echo" $ {clients [0]} "" ou qualquer outro número > = 0
código de trabalho:
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]}"