Declara uma matriz, mas não a define?

8

Existem muitos guias out there que mostra como declarar e definir um array

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

O que eu estou tentando alcançar é declarar um array, mas não defini-lo, porque ele não precisa ser definido imediatamente, na maioria das linguagens de programação ele será parecido com isto

int bar[100];

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

    
por Computernerd 09.01.2014 / 05:32

3 respostas

14

Você pode especificar que uma variável é uma matriz, criando uma matriz vazia, assim:

var_name=()

var_name será então uma matriz conforme relatada 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 assim:

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
    
por kiri 09.01.2014 / 05:36
3

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

A instrução declare com a opção -a pode ser usada para declarar uma variável como uma matriz, mas não é necessário. Todas as variáveis podem ser usadas como matrizes sem definição explícita. De fato, parece que, em certo sentido, todas as variáveis são arrays, e que a atribuição sem um subscrito é o mesmo que atribuir a "[0]". A declaração explícita de um array é feita usando o declare built-in:

declare -a ARRAYNAME

Matrizes associativas são criadas usando

declare -A name.

Atributos podem ser especificados para uma variável de matriz usando as declarações declare e readonly. 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]}
    
por a.m. 09.01.2014 / 07:13
0

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

bar=()

O Simple For Loop tem valor nessa matriz e imprime isso:

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

Espero que ajude.

    
por Maniruzzaman Akash 23.10.2017 / 07:34

Tags