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

14

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

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

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

int bar[100];

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

Computernerd
источник

Ответы:

23

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

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
харакири
источник
minerz029, @am: ..и как определить элементы? Я пытался, но мог определить / получить доступ только к одной строке. Небольшой пример определения и доступа к значениям переменной массива был бы отличным ...
точный
хорошо понял это .. я скучал по скобам ..
точный
4

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

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

declare -a ARRAYNAME

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

declare -A name.

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

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

${array_name[index]}
утра
источник
1

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

bar=()

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

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

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

Манируззаман Акаш
источник
В чем проблема в ответе? Зачем голосовать?
Манируззаман Акаш