¿Declarar una matriz pero no definirla?


14

Hay un montón de guías por ahí que muestran cómo declarar y definir una matriz

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

Lo que estoy tratando de lograr es declarar una matriz pero no definirla porque no tiene que definirse de inmediato, en la mayoría de los lenguajes de programación se verá así

int bar[100];

¿Es esto posible en el lenguaje de script de shell?

Respuestas:


23

Puede especificar que una variable es una matriz creando una matriz vacía, así:

var_name=()

var_name entonces será una matriz según lo informado por

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

Ejemplo:

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 produce algo como esto:

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

minerz029, @am: ..y cómo definir los elementos? Lo intenté, pero sólo podía definir / acceso a una única cadena .. un pequeño ejemplo para definir y acceder a los valores de variable de matriz sería grande ...
precisa

así lo entendí ... me faltaban los frenos ...
preciso el

4

Además de lo anterior, también podemos crear una matriz declarando declaración.

La declaración de declaración con la opción -a se puede usar para declarar una variable como una matriz, pero no es necesaria. Todas las variables pueden usarse como matrices sin definición explícita. De hecho, parece que, en cierto sentido, todas las variables son matrices, y esa asignación sin un subíndice es lo mismo que asignar a "[0]". La declaración explícita de una matriz se realiza mediante la declaración incorporada:

declare -a ARRAYNAME

Las matrices asociativas se crean usando

declare -A name.

Los atributos se pueden especificar para una variable de matriz utilizando los valores incorporados declare y readonly. Cada atributo se aplica a todos los miembros de una matriz.

Después de establecer cualquier variable de matriz, accede a ella de la siguiente manera:

${array_name[index]}

1

Esto es realmente lo mismo que C. En C, podemos tomar la matriz que prefiera. Aquí, podemos tomar una matriz vacía y luego poner cualquier valor.

bar=()

Simple For Loop para tomar valor en esa matriz e imprimir eso:

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

Espero eso ayude.


¿Cuál es el problema en la respuesta? ¿Por qué bajar el voto?
Maniruzzaman Akash el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.