Bir dizi bildirmek ama tanımlamak değil mi?


14

Bir dizinin nasıl bildirileceğini ve tanımlanacağını gösteren çok sayıda kılavuz var.

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

Ne elde etmeye çalışıyorum bir dizi ilan etmek ama hemen tanımlamak zorunda değil çünkü tanımlamak değil, çoğu programlama dilinde böyle bir şey görünecektir

int bar[100];

Kabuk kodlama dilinde bu mümkün müdür?

Yanıtlar:


23

Boş bir dizi oluşturarak bir değişkenin dizi olduğunu belirtebilirsiniz, örneğin:

var_name=()

var_name daha sonra tarafından bildirildiği gibi bir dizi olacaktır

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

Misal:

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

böyle bir şey çıktı:

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: ..ve elemanlar nasıl tanımlanır? Denedim ama sadece tek bir dizeyi tanımlamak / erişmek olabilir .. tanımlamak ve dizi değişkenine değerleri erişmek için küçük bir örnek harika olurdu ...
kesin

iyi anladım ..
kesin

4

Yukarıdaki yola ek olarak, declare deyimi ile bir dizi de oluşturabiliriz.

-A seçeneğine sahip declare deyimi, bir değişkeni dizi olarak bildirmek için kullanılabilir, ancak gerekli değildir. Tüm değişkenler, açık bir tanım olmaksızın diziler olarak kullanılabilir. Aslında, bir anlamda tüm değişkenlerin diziler olduğu ve alt simge içermeyen atamanın "[0]" a atama ile aynı olduğu görülmektedir. Bir dizinin açık bildirimi yerleşik declare kullanılarak yapılır:

declare -a ARRAYNAME

İlişkilendirilebilir diziler kullanılarak oluşturulur

declare -A name.

Bir dizi değişkeni için nitelikler, declare ve readonly builtins kullanılarak belirtilebilir. Her öznitelik bir dizinin tüm üyeleri için geçerlidir.

Herhangi bir dizi değişkenini ayarladıktan sonra, değişkene aşağıdaki gibi erişirsiniz:

${array_name[index]}

1

Bu aslında C ile aynıdır. C'de diziyi tercih ettiğiniz gibi alabiliriz. Burada boş bir dizi alabilir ve sonra herhangi bir değer koyabiliriz.

bar=()

Loop'un bu dizide değer alması ve şunu yazdırması için basit:

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

Umarım yardımcı olur.


Cevaptaki problem nedir? Neden aşağı oy?
Maniruzzaman Akash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.