Answers:
arr=("new_element" "${arr[@]}")
通常,您会这样做。
arr=("new_element1" "new_element2" "..." "new_elementN" "${arr[@]}")
arr=( "${arr[@]}" "new_element" )
或者代替
arr+=( "new_element" )
通常,您会这样做。
arr=( "${arr[@]}" "new_element1" "new_element2" "..." "new_elementN") #Or
arr+=( "new_element1" "new_element2" "..." "new_elementN" )
假设我们要在Index2 arr [2]的位置添加一个元素,实际上我们将在以下子数组上进行合并:
获取索引位置为2到最后一个arr [2],arr [3],...的所有元素。
arr=( "${arr[@]:0:2}" "new_element" "${arr[@]:2}" )
除了从数组中删除一个元素(假设元素#2)之外,我们还需要连接两个子数组。第一个子数组将包含元素#2之前的元素,第二个子数组将包含元素#2之后的元素。
arr=( "${arr[@]:0:2}" "${arr[@]:3}" )
${arr[@]:0:2}
将获得两个元素arr [0]和arr [1]从数组的开头开始。${arr[@]:3}
将从index3 arr [3] 到最后的所有元素。删除元素的另一种可能性是
使用unset
(实际上将“ null”值分配给元素)
unset arr[2]
如果您知道元素的值,请使用替换模式。
arr=( "${arr[@]/PATTERN/}" )
arr+=(element)
和unset arr[2]
(应为unset -v 'arr[2]'
!)外,它假定为非稀疏数组。另请注意,arr=( "${arr[@]/PATTERN/}" )
不会更改元素的数量。它所能做的就是用空字符串替换它们。
请注意,bash
(从ksh复制)中的数组是关联数组。
a=(newvalue "$a[@]")
会创建一个$a
具有newvalue
as 的新数组,${a[0]}
并将原始数组的元素按其键的数字顺序附加到键1、2 ...
例如,如果您有:
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")
这就解释了为什么没有内置的运算符。
如果要插入newvalue
as ${a[0]}
并将所有其他键都移动一个,则需要一个临时数组:
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
诸如此类zsh
或yash
具有普通数组的外壳具有用于此的运算符:
zsh
:
a[1,0]=newvalue
(也适用于将字符串放在标量变量之前)
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')