Bash: leia em um array
Aprenda como usar o comando read para obter a entrada do usuário em um array em scripts bash.
Existem várias maneiras de inserir valores no array, mas a maioria delas são manuais.
Porém, adicionar valores manualmente nem sempre é uma boa ideia, especialmente quando se deseja adicionar centenas de elementos em um array.
E nesse caso, você pode ler em um array onde pode usar o arquivo ou uma linha de múltiplas strings para adicionar valores a um array.
Então, vamos dar uma olhada em como você pode ler um array no bash.
Como ler um array no bash
Para ler um array, você usa o comando read com o sinalizador -a
.
Ele usa o espaço em branco como delimitador (por padrão), então certifique-se de separar duas palavras-chave por espaço em branco para que o bash possa diferenciar entre dois elementos e armazená-los em uma matriz com índices diferentes.
A sintaxe para ler um array é bastante simples. Tudo que você precisa fazer é usar o comando read com o sinalizador -a
e anexar o nome do array:
read -a ArrayName
E solicitará ao usuário que insira os valores que precisam ser armazenados no array especificado.
Agora, existem duas maneiras de imprimir os elementos de um array:
Usando
echo $ {ArrayName[@]}
Usando
echo $ {ArrayName[*]}
Mas há uma diferença entre como eles lidam com os elementos:
O método
[@]
imprimirá valores, pois são elementos individuaisConsiderando que o método
[*]
imprimirá todos os elementos como uma única string
Agora, vamos dar uma olhada em alguns exemplos.
1. Insira valores no prompt
Se quiser adicionar vários valores em uma matriz de uma vez, você pode consultar este método onde o usuário será solicitado a inserir os valores um por um.
E para fazer isso, você teria que usar a seguinte sintaxe:
echo "Enter whitespace-separated values:"
read -a array
echo "You've entered the following elements: ${array[@]}"
Aqui, usei um comando echo que simplesmente imprime "Insira valores separados por espaços em branco:" e o comando de leitura solicitará que o usuário insira valores.
E o último comando echo irá imprimir o valor do array para verificar se todos os elementos estão lá ou não.
Se você executar o script acima, deverá esperar a seguinte saída:
Mas e se você quiser imprimir um elemento específico, você deve especificar o número de índice desse elemento em array[@]
substituindo @
pelo número de índice .
Por exemplo, se eu quiser imprimir o 5º elemento do array, usarei o seguinte:
echo "Enter whitespace-separated values:"
read -a array
echo "The 5th element in an array is: ${array[5]}"
2. Leia um array usando um arquivo (usando um loop)
Se você já tiver centenas de strings presentes na forma de um arquivo, poderá usar este método.
Este método envolve o uso do loop while no bash, portanto, se você quiser um método sem usar nenhum loop, poderá pular para a próxima solução.
Para usar este método, você pode seguir a sintaxe fornecida:
#!/bin/bash
file="data.txt"
array=()
while IFS= read -r line; do
array+=("$line")
done < "$file"
echo "All the elements of an array are: ${array[@]}"
Eu sei que parece complexo. Deixe-me quebrar isto para você.
array()
criou um array vazio chamadoarray
.IFS=
é usado para especificar um delimitador (que é um espaço em branco no meu caso).array+=("$line")
a variável de linha armazena o valor de cada linha no arquivo e usando este argumento, ela é armazenada em um array.done < "$file"
instrui o loop a ler o nome do arquivo de$file
usando o redirecionamento de entrada<
.
E quando executado, você pode esperar o seguinte resultado:
3. Leia um array usando um arquivo (sem loop)
Como eu, se você tentar evitar loops tanto quanto possível, poderá consultar esta seção, que é bastante fácil em comparação com o método acima.
Aqui, usarei o comando mapfile conforme mostrado:
#!/bin/bash
file="data.txt"
array=()
mapfile -t array < "$file"
printf "Entered elements are:\n"
printf '%s\n' "${array[@]}"
Aqui, o sinalizador -t
é usado para remover a cauda de linhas, como espaços em branco, para ter uma formatação consistente.
Enquanto o '%s\n'
é usado para imprimir cada caractere de um array em uma nova linha.
Isto é o que obtive ao executar o script acima:
E aí está!
Bash iniciante? Deixe-me ajudá-lo
Se você está apenas começando com o bash e está confuso entre vários cursos, então, fizemos uma série simples de artigos do bash que esclareceriam todos os princípios básicos:
Espero que este guia seja útil para você.