Como posso ler a entrada do usuário como uma matriz no Bash?

9

Como eu poderia ler a entrada do usuário como uma matriz? :)

    
por moata_u 06.03.2011 / 08:06

3 respostas

8

Aqui está uma maneira de fazer isso:

while read line
do
    my_array=("${my_array[@]}" $line)
done

echo ${my_array[@]}

Se você apenas executá-lo, ele continuará lendo a entrada padrão até que você pressione Ctrl + D (EOF). Depois disso, as linhas digitadas estarão em my_array . Alguns podem achar este código confuso. O corpo do loop basicamente diz my_array = my_array + element .

Algumas partes interessantes da documentação:

por Stefano Palazzo 06.03.2011 / 08:46
5

Leia com isto:

read -a arr

E para impressão, use:

for elem in ${arr[@]}
do 
  echo $elem
done
    
por ABcDexter 22.07.2015 / 13:21
2

E aquele que não recria a matriz a cada vez (embora exija o bash 3.1 ou mais recente):

array=()
while IFS= read -r -p "Next item (end with an empty line): " line; do
    [[ $line ]] || break  # break if line is empty
    array+=("$line")
done

printf '%s\n' "Items read:"
printf '  «%s»\n' "${array[@]}"

Veja o link para saber mais.

E, como sempre, para evitar a criação de bugs, leia o link e evite os tldp-guides, como o guia avançado de scripts do bash.

    
por geirha 08.03.2011 / 22:40