Yanıtlar:
arr=("new_element" "${arr[@]}")
Genellikle yaparsın.
arr=("new_element1" "new_element2" "..." "new_elementN" "${arr[@]}")
arr=( "${arr[@]}" "new_element" )
Veya onun yerine
arr+=( "new_element" )
Genellikle yaparsın.
arr=( "${arr[@]}" "new_element1" "new_element2" "..." "new_elementN") #Or
arr+=( "new_element1" "new_element2" "..." "new_elementN" )
İndeks2 arr [2] pozisyonuna bir eleman eklemek istediğimizi varsayalım , aslında alt dizilerin altında birleşiriz:
İndeks pozisyonu2 olan tüm elementleri son arr [2] , arr [3] , ....
arr=( "${arr[@]:0:2}" "new_element" "${arr[@]:2}" )
Bir öğeyi bir diziden kaldırmaya ek olarak (2 numaralı diyelim), iki alt diziyi birleştirmemiz gerekir. İlk alt dizi # 2 öğesinden önce elemanları tutacaktır ve ikinci alt dizi # 2 öğesinden sonra öğeleri içerecektir.
arr=( "${arr[@]:0:2}" "${arr[@]:3}" )
${arr[@]:0:2}
arr [0] adlı iki eleman alır ve arr [1] dizinin başından başlar.${arr[@]:3}
İndeks3 arrından [3] tüm elemanları sonuncuya kadar alacaktır .Bir öğeyi kaldırmak için başka bir olasılık
Kullanma unset
(aslında öğeye 'null' değeri ata)
unset arr[2]
Elementlerinizin değerini biliyorsanız, değiştirme desenini kullanın.
arr=( "${arr[@]/PATTERN/}" )
arr+=(element)
ve unset arr[2]
(ki olmalıdır unset -v 'arr[2]'
!), Seyrek olmayan diziler varsayar. Ayrıca arr=( "${arr[@]/PATTERN/}" )
, öğelerin sayısını değiştirmediğini unutmayın . Tüm yapabileceği, onları boş dizeyle değiştirmek.
Bu diziler Not bash
(ksh kopyalanan) oldukça ilişkisel dizilerdir.
a=(newvalue "$a[@]")
as ile ve 1, 2 tuşlarıyla tuşlarının sayısal sırasına eklenen orijinal dizinin öğelerini $a
içeren yeni bir dizi oluşturur ...newvalue
${a[0]}
Örneğin, eğer olsaydı:
bash-4.4$ typeset -p a
declare -a a=([0]="foo" [12]="bar")
bash-4.4$ a=(newvalue "${a[@]}")
bash-4.4$ typeset -p a
declare -a a=([0]="newvalue" [1]="foo" [2]="bar")
Bu neden bunun için yerleşik bir operatör olmadığını açıklar.
newvalue
As eklemek ${a[0]}
ve diğer tüm tuşları birer birer değiştirmek isterseniz, geçici bir diziye ihtiyacınız olacaktır:
b=newvalue
for k in "${!a[@]}"; do
b[k+1]=${a[k]}
done
unset a
for k in "${!b[@]}"; do
a[k]=${b[k]}
done
unset b
Gibi zsh
veya yash
normal dizileri olan kabukları bunun için operatör var:
zsh
:
a[1,0]=newvalue
(ayrıca skaler değişkenlere dizeleri hazırlamak için de çalışır)
yash
:
array -i a 0 newvalue
# array declaration
arr=()
#Function to read data from file a and add into array
fun_add_in_array()
{
input=$1
while IFS=',' read -r f1 f2
do
echo "Element1 : $f1"
echo "Element2 : $f2"
arr+=( "$f1" )
done < "$input"
}
#Function to print a array
fun_read_array()
{
arr=("$@")
for i in "${arr[@]}"
do
echo $i
done
}
ARRAY+=('foo')