Объявить массив, но не определить его?

Существует много руководства там, которое показывает, как объявить и определить массив

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

То, чего я пытаюсь достигнуть, должно объявить массив, но не определить его, потому что это не должно быть, сразу определяют, на большинстве языков программирования он будет выглядеть примерно так

int bar[100];

Действительно ли это возможно на языке сценариев оболочки?

14
задан 9 January 2014 в 17:40

3 ответа

Можно указать, что переменная является массивом путем создания пустого массива, как так:

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
22
ответ дан 9 January 2014 в 17:40

В дополнение к вышеприведенному способу, мы также можем создать массив с помощью оператора объявлений.

Оператор объявления с параметром -a можно использовать для объявления переменной как массива, но это не обязательно. Все переменные могут использоваться как массивы без явного определения. На самом деле, похоже, что в некотором смысле все переменные являются массивами, и это присвоение без нижнего индекса такое же, как и присвоение «[0]». Явное объявление массива выполняется с помощью встроенного объявления:

declare -a ARRAYNAME

Ассоциативные массивы создаются с использованием

declare -A name.

. Атрибуты могут быть указаны для переменной массива с помощью метода объявлений и только для чтения. внутренние команды. Каждый атрибут применяется ко всем членам массива.

После того, как вы установили любую переменную массива, вы получаете доступ к ней следующим образом:

${array_name[index]}
0
ответ дан 9 January 2014 в 17:40

Это на самом деле то же самое, что и C. В C мы можем взять массив, как вы предпочитаете. Здесь мы можем взять пустой массив и затем поместить любые значения.

bar=()

Простой цикл, чтобы получить значение в этом массиве и вывести следующее:

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

Надеюсь, это поможет.

0
ответ дан 9 January 2014 в 17:40

Другие вопросы по тегам:

Похожие вопросы: