PHP $array[] = 'foo';
vs bash yapıyor gibi bir şey yapmanın bir yolu var mı :
array[0]='foo'
array[1]='bar'
PHP $array[] = 'foo';
vs bash yapıyor gibi bir şey yapmanın bir yolu var mı :
array[0]='foo'
array[1]='bar'
Yanıtlar:
Evet var:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
Atama ifadesinin kabuk değişkenine veya dizi dizinine bir değer atadığı bağlamda (bkz. Diziler), '+ =' operatörü değişkenin önceki değerine eklemek veya bu değere eklemek için kullanılabilir.
ARRAY
yalnızca gerçek bir değişken adı için bir yer tutucu olduğunu unutmayın . Diziniz endeksleri bile değil sıralı ile ekleme +=
sadece en yüksek endeks + 1 atayacağı
${myarray[@]}
- bir dizi değişkenine skalermiş gibi başvurmak , öğesinin 0 değerine erişmekle aynıdır; diğer bir deyişle: $myarray
ile aynıdır ${myarray[0]}
.
Dumb Guy'ın belirttiği gibi , dizinin sıfırdan başlayıp sıralı olup olmadığını not etmek önemlidir. Bitişik olmayan indekslere atama yapabileceğiniz ve bu dizinleri kaldırabileceğiniz için ${#array[@]}
dizinin sonundaki her zaman bir sonraki öğe değildir.
$ array=(a b c d e f g h)
$ array[42]="i"
$ unset array[2]
$ unset array[3]
$ declare -p array # dump the array so we can see what it contains
declare -a array='([0]="a" [1]="b" [4]="e" [5]="f" [6]="g" [7]="h" [42]="i")'
$ echo ${#array[@]}
7
$ echo ${array[${#array[@]}]}
h
Son dizini nasıl alacağınız aşağıda açıklanmıştır:
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
Bu, bir dizinin son elemanının nasıl alınacağını gösterir. Bunu sıklıkla göreceksiniz:
$ echo ${array[${#array[@]} - 1]}
g
Gördüğünüz gibi, seyrek bir dizi ile uğraştığımız için, bu son öğe değil. Bu hem seyrek hem de bitişik dizilerde çalışır:
$ echo ${array[@]: -1}
i
${array[@]: start[:count]}
İade sayılarını döndürür. veya belirtilmezse, kalan tüm öğeler. başlayarak aşağıdaki elem .: - Eğer başlangıç> = 0: elem. dizini> = başlangıç olan. - Eğer başlangıç <0 ise: elemden. dizini (son dizi dizini + 1) - abs (başlat); CAVEAT: abs (start)> (son dizi dizini + 1) ise, boş bir dize döndürülür. Sayı belirtilirse, indeksleri başlangıçtan bitişik olmasa bile, birçok öğe döndürülür.
${array[-1]}
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
arr=("${arr[@]}" "new")
içinde boşluk bulunan elemanlarınız varsa kullanın
Diziniz her zaman ardışıksa ve 0'dan başlıyorsa, bunu yapabilirsiniz:
array[${#array[@]}]='foo'
# gets the length of the array
${#array_name[@]}
Yanlışlıkla eşittir işareti arasındaki boşlukları kullanırsanız:
array[${#array[@]}] = 'foo'
Ardından aşağıdakine benzer bir hata alırsınız:
array_name[3]: command not found
+=
sözdizimi (bkz. @ E-t172'nin cevabı) (a) daha basittir ve (b) bitişik olmayan ve / veya 0 ile başlamayan dizilerle de çalışır.
+=
$arr += ($el)
dizeyi uzaya bölüyor ve öğelerin her birini ekliyor gibiydi.
Dizine alınmış bir dizi ile aşağıdakine benzer bir şey yapabilirsiniz:
declare -a a=()
a+=('foo' 'bar')