Оголосити масив, але не визначити його?


14

Існує багато посібників , які показують, як оголосити і визначити масив

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

Я намагаюся досягти - це оголосити масив, але не визначити його, оскільки його не потрібно визначати відразу, у більшості мов програмування це виглядатиме приблизно так

int bar[100];

Чи можливо це в мові сценаріїв оболонок?

Відповіді:


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

На додаток до вищезгаданого способу, ми також можемо створити масив за допомогою заяви заяви.

Оператор заявити за допомогою -a може використовуватися для оголошення змінної як масиву, але це не обов'язково. Усі змінні можуть використовуватися як масиви без явного визначення. Власне кажучи, виявляється, що в певному сенсі всі змінні є масивами, і це призначення без підпису - це те саме, що присвоєння "[0]". Явне оголошення масиву виконується за допомогою вбудованого оголошення:

declare -a ARRAYNAME

Асоціативні масиви створюються за допомогою

declare -A name.

Атрибути можуть бути вказані для змінної масиву з використанням вбудованих записів і лише для читання. Кожен атрибут стосується всіх членів масиву.

Після встановлення будь-якої змінної масиву ви отримуєте доступ до неї наступним чином:

${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

Сподіваюся, це допомагає.


У чому проблема у відповіді? Чому голосування проти?
Maniruzzaman Akash
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.