Você pode fazer isso usando o bash mapfile
:
$ cat /tmp/file.txt
Bob
Jennifer
Caleb
$ mapfile -t guests < /tmp/file.txt
$ printf '%s\n' "${guests[@]}"
Bob
Jennifer
Caleb
#!/bin/bash
function guest {
i=0
while IFS = $'\n' read -r name; do
GUESTS[i]="${name}"
((i++))
done<filename.txt
}
function print{
i=0
while ((${GUESTS[@]} > $i)) do
echo "${GUESTS[i++]}\n"
done
}
No código que eu forneci acima, eu estou tentando fazer duas funções, a primeira função é pegar qualquer arquivo de texto com uma lista de nomes aleatórios de pessoas (ex. Bob \ n, Jennifer \ n, Caleb \ n, etc) e convertê-lo em uma matriz de PESSOAS. O código DEVE ESTAR no ARRAY OF GUESTS. Então, na segunda função, deve-se imprimir o conjunto de PESSOAS, com cada nome tendo sua própria linha.
Você pode fazer isso usando o bash mapfile
:
$ cat /tmp/file.txt
Bob
Jennifer
Caleb
$ mapfile -t guests < /tmp/file.txt
$ printf '%s\n' "${guests[@]}"
Bob
Jennifer
Caleb
Para a sua primeira função, o Bash tornou isso mais fácil para você. Aqui está tudo o que você precisa fazer:
readarray GUESTS < filename.txt
Para o segundo, deve ser algo como isto:
print () {
for index in ${!GUESTS[@]}; do
echo ${GUESTS[$index]}
done
}
Tags bash shell-script array read