Zadeklarować tablicę, ale nie zdefiniować?

14

Istnieje wiele przewodników , które pokazują, jak zadeklarować i zdefiniować tablicę

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

To, co próbuję osiągnąć, to zadeklarować tablicę, ale jej nie zdefiniować, ponieważ nie trzeba jej definiować natychmiast, w większości języków programowania będzie to wyglądać mniej więcej tak:

int bar[100];

Czy jest to możliwe w języku skryptowym powłoki?

Computernerd
źródło

Odpowiedzi:

23

Możesz określić, że zmienna jest tablicą, tworząc pustą tablicę, na przykład:

var_name=()

var_name będzie tablicą zgłoszoną przez

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

Przykład:

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]}"

która generuje coś takiego:

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
kiri
źródło
minerz029, @am: ..i jak zdefiniować elementy? Próbowałem, ale może tylko definiować / dostęp pojedynczy ciąg .. trochę przykład zdefiniować i dostęp wartości do zmiennej tablicowej byłby wielki ...
precyzyjny
dobrze się zorientowałem ... brakowało mi nawiasów klamrowych ...
dokładnie
4

Oprócz powyższego sposobu możemy również utworzyć tablicę za pomocą instrukcji deklaracji.

Instrukcja deklaracji z opcją -a może służyć do deklarowania zmiennej jako tablicy, ale nie jest to konieczne. Wszystkie zmienne mogą być używane jako tablice bez wyraźnej definicji. W rzeczywistości wydaje się, że w pewnym sensie wszystkie zmienne są tablicami, a przypisanie bez indeksu dolnego jest takie samo jak przypisanie do „[0]”. Jawna deklaracja tablicy jest wykonywana przy użyciu wbudowanej deklaracji:

declare -a ARRAYNAME

Tablice asocjacyjne są tworzone za pomocą

declare -A name.

Atrybuty mogą być określone dla zmiennej tablicowej za pomocą wbudowanych deklaracji i tylko do odczytu. Każdy atrybut dotyczy wszystkich członków tablicy.

Po ustawieniu dowolnej zmiennej tablicowej można uzyskać do niej dostęp w następujący sposób:

${array_name[index]}
jestem
źródło
1

Jest to w rzeczywistości to samo co C. W C możemy wziąć tablicę według własnego uznania. Tutaj możemy wziąć pustą tablicę, a następnie wstawić dowolne wartości.

bar=()

Prosta pętla, aby pobrać wartość z tej tablicy i wydrukować:

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

Mam nadzieję, że to pomoże.

Maniruzzaman Akash
źródło
Jaki jest problem w odpowiedzi? Dlaczego głosować w dół?
Maniruzzaman Akash