Après quelques études et expérimentations, je suis coincé avec le retour d'un tableau à partir d'une fonction, et je n'arrive pas à voir mon erreur.
En bref, ce que cela devrait/doit faire est d'utiliser une fonction avoir une fonction qui lit les valeurs/chaînes d'un fichier et renvoie un tableau :
- déclarer un tableau : clients
- assigner le tableau de retour de la fonction aux clients du tableau
- clients du réseau d'affichage
Il me semble que la fonction lit le fichier entier et non ligne par ligne, mettant ainsi toutes les chaînes dans une seule cellule du tableau, et je ne suis pas sûr de savoir comment afficher explicitement les clients[0] car ce $(clients[0]) échoue dans le code bash
Si, par hasard, je fais quelque chose d'incorrect, veuillez me le signaler ou me faire part de toute suggestion d'optimisation.
#!/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 Pour ceux qui veulent voir comment j'ai résolu ce problème :
-
déclarer un tableau "global" avec
declare -a clients
-
pendant que la fonction s'exécute, ajouter des valeurs DIRECTEMENT au tableau des clients
Pour afficher une seule position d'index d'un tableau, réf. à la dernière ligne de code
echo "${clients[0]}" or any other number >=0
Code de travail :
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]}"