Declarar uma matriz, mas não defini-la?

14

Existem muitos guias por aí que mostram como declarar e definir uma matriz

foo[0]=abc 
foo[1]=def

O que estou tentando alcançar é declarar uma matriz, mas não defini-la, porque ela não precisa ser definida imediatamente; na maioria das linguagens de programação, será algo parecido com isto

int bar[100];

Isso é possível na linguagem de script de shell?

Computernerd
fonte

Respostas:

23

Você pode especificar que uma variável é uma matriz criando uma matriz vazia, da seguinte forma:

var_name=()

var_name será então uma matriz conforme relatado por

$ declare -p var_name
declare -a var_name='()'

Exemplo:

var_name=()
for i in {1..10}; do
    var_name[$i]="Field $i of the list"
done
declare -p var_name
echo "Field 5 is: ${var_name[5]}"

que gera algo como isto:

declare -a var_name='([1]="Field 1 of the list" [2]="Field 2 of the list" [3]="Field 3 of the list" [4]="Field 4 of the list" [5]="Field 5 of the list" [6]="Field 6 of the list" [7]="Field 7 of the list" [8]="Field 8 of the list" [9]="Field 9 of the list" [10]="Field 10 of the list")'
Field 5 is: Field 5 of the list
kiri
fonte
minerz029, @am: ..e como definir os elementos? Eu tentei, mas só poderia definir / acesso uma única corda .. um pequeno exemplo para definir e acessar os valores a variável de matriz seria ótimo ...
preciso
bem descobri isso .. Eu estava faltando o aparelho ..
precisa
4

Além da maneira acima, também podemos criar uma matriz por declaração declare.

A declaração declare com a opção -a pode ser usada para declarar uma variável como uma matriz, mas não é necessária. Todas as variáveis ​​podem ser usadas como matrizes sem definição explícita. De fato, parece que, de certo modo, todas as variáveis ​​são matrizes, e essa atribuição sem um índice subscrito é a mesma que atribuir a "[0]". A declaração explícita de uma matriz é feita usando a declaração embutida:

declare -a ARRAYNAME

Matrizes associativas são criadas usando

declare -A name.

Os atributos podem ser especificados para uma variável de matriz usando os recursos declarar e somente leitura. Cada atributo se aplica a todos os membros de uma matriz.

Depois de definir qualquer variável de matriz, você a acessa da seguinte maneira:

${array_name[index]}
sou
fonte
1

Na verdade, é o mesmo que C. Em C, podemos usar o array como preferir. Aqui, podemos pegar uma matriz vazia e depois colocar quaisquer valores.

bar=()

Simples For Loop para obter valor nessa matriz e imprimir:

bar=()
for ((i=0;i<10;i++));
do
    read bar[$i]  #Take Value in bar array
    echo bar[$i]
done

Espero que ajude.

Maniruzzaman Akash
fonte
Qual é o problema na resposta? Por que votar?
Maniruzzaman Akash