Câu trả lời:
arr=("new_element" "${arr[@]}")
Nói chung, bạn sẽ làm.
arr=("new_element1" "new_element2" "..." "new_elementN" "${arr[@]}")
arr=( "${arr[@]}" "new_element" )
Hoặc thay vào đó
arr+=( "new_element" )
Nói chung, bạn sẽ làm.
arr=( "${arr[@]}" "new_element1" "new_element2" "..." "new_elementN") #Or
arr+=( "new_element1" "new_element2" "..." "new_elementN" )
Giả sử chúng ta muốn thêm một phần tử vào vị trí của mảng Index2 [2] , chúng ta thực sự sẽ hợp nhất trên các mảng con bên dưới:
Nhận tất cả các phần tử với Index location2 đến mảng cuối cùng [2] , mảng [3] , ....
arr=( "${arr[@]:0:2}" "new_element" "${arr[@]:2}" )
Ngoài việc loại bỏ một phần tử khỏi một mảng (giả sử phần tử # 2), chúng ta cần nối hai mảng con. Mảng con đầu tiên sẽ giữ các phần tử trước phần tử # 2 và mảng con thứ hai sẽ chứa các phần tử sau phần tử # 2.
arr=( "${arr[@]:0:2}" "${arr[@]:3}" )
${arr[@]:0:2}
sẽ nhận được hai phần tử mảng [0] và mảng [1] bắt đầu từ đầu mảng.${arr[@]:3}
sẽ nhận được tất cả các phần tử từ mảng index3 [3] đến cuối cùng.Một khả năng khác để loại bỏ một yếu tố là
Sử dụng unset
(thực sự gán giá trị 'null' cho phần tử)
unset arr[2]
Sử dụng mô hình thay thế nếu bạn biết giá trị của các yếu tố của bạn.
arr=( "${arr[@]/PATTERN/}" )
arr+=(element)
và unset arr[2]
(nên là unset -v 'arr[2]'
!), Giả sử các mảng không thưa thớt. Cũng lưu ý rằng arr=( "${arr[@]/PATTERN/}" )
không thay đổi số lượng phần tử. Tất cả những gì nó có thể làm là thay thế chúng bằng chuỗi rỗng.
Lưu ý rằng các mảng trong bash
(được sao chép từ ksh) là các mảng khá liên kết.
a=(newvalue "$a[@]")
sẽ làm cho một mới $a
mảng với newvalue
như ${a[0]}
và các yếu tố của mảng ban đầu nối theo thứ tự số của chính họ với các phím 1, 2 ...
Chẳng hạn, nếu bạn có:
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")
Điều đó giải thích tại sao không có toán tử dựng sẵn cho điều đó.
Nếu bạn muốn chèn newvalue
as ${a[0]}
và dịch chuyển tất cả các phím khác, bạn cần một mảng tạm thời:
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
Shell thích zsh
hoặc yash
có mảng bình thường có toán tử cho điều đó:
zsh
:
a[1,0]=newvalue
(cũng hoạt động để chuẩn bị chuỗi cho biến vô hướng)
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')