Существует много руководства там, которое показывает, как объявить и определить массив
foo[0]=abc
foo[1]=def
То, чего я пытаюсь достигнуть, должно объявить массив, но не определить его, потому что это не должно быть, сразу определяют, на большинстве языков программирования он будет выглядеть примерно так
int bar[100];
Действительно ли это возможно на языке сценариев оболочки?
Можно указать, что переменная является массивом путем создания пустого массива, как так:
var_name=()
var_name
затем будет массив, как сообщается
$ declare -p var_name
declare -a var_name='()'
Пример:
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]}"
который производит что-то вроде этого:
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
В дополнение к вышеприведенному способу, мы также можем создать массив с помощью оператора объявлений.
Оператор объявления с параметром -a можно использовать для объявления переменной как массива, но это не обязательно. Все переменные могут использоваться как массивы без явного определения. На самом деле, похоже, что в некотором смысле все переменные являются массивами, и это присвоение без нижнего индекса такое же, как и присвоение «[0]». Явное объявление массива выполняется с помощью встроенного объявления:
declare -a ARRAYNAME
Ассоциативные массивы создаются с использованием
declare -A name.
. Атрибуты могут быть указаны для переменной массива с помощью метода объявлений и только для чтения. внутренние команды. Каждый атрибут применяется ко всем членам массива.
После того, как вы установили любую переменную массива, вы получаете доступ к ней следующим образом:
${array_name[index]}
Это на самом деле то же самое, что и C. В C мы можем взять массив, как вы предпочитаете. Здесь мы можем взять пустой массив и затем поместить любые значения.
bar=()
Простой цикл, чтобы получить значение в этом массиве и вывести следующее:
bar=()
for ((i=0;i<10;i++));
do
read bar[$i] #Take Value in bar array
echo bar[$i]
done
Надеюсь, это поможет.