αғs*_*нιη 119
arr=("new_element" "${arr[@]}")
Run Code Online (Sandbox Code Playgroud)
一般来说,你会这样做。
arr=("new_element1" "new_element2" "..." "new_elementN" "${arr[@]}")
Run Code Online (Sandbox Code Playgroud)
arr=( "${arr[@]}" "new_element" )
Run Code Online (Sandbox Code Playgroud)
或者相反
arr+=( "new_element" )
Run Code Online (Sandbox Code Playgroud)
一般来说,你会这样做。
arr=( "${arr[@]}" "new_element1" "new_element2" "..." "new_elementN") #Or
arr+=( "new_element1" "new_element2" "..." "new_elementN" )
Run Code Online (Sandbox Code Playgroud)
假设我们想在 Index2 arr[2]的位置添加一个元素,我们实际上会在下面的子数组上进行合并:
获取所有索引为 position2 的元素到最后一个arr[2] , arr[3] , ....
arr=( "${arr[@]:0:2}" "new_element" "${arr[@]:2}" )
Run Code Online (Sandbox Code Playgroud)除了从数组中删除一个元素(假设是元素 #3),我们还需要连接两个子数组。第一个子数组将保存元素#3 之前的元素,第二个子数组将包含元素#3 之后的元素。
arr=( "${arr[@]:0:2}" "${arr[@]:3}" )
Run Code Online (Sandbox Code Playgroud)
${arr[@]:0:2}将获得两个元素arr[0]和arr[1]从数组的开头开始。${arr[@]:3}将获取从 index3 arr[3] 到最后一个的所有元素。
一种可能的方便的方法来重新构建 arr 排除 element#3 (arr[2]) 从中:
del_element=3; arr=( "${arr[@]:0:$((del_element-1))}" "${arr[@]:$del_element}" )
Run Code Online (Sandbox Code Playgroud)
指定要在 中排除的元素del_element=。
删除元素的另一种可能性是
使用unset(实际上为元素分配“空”值)
unset -v 'arr[2]'
Run Code Online (Sandbox Code Playgroud)如果您知道数组元素的值以截断它们的值(用空字符串替换),请使用替换模式。
arr=( "${arr[@]/PATTERN/}" )
Run Code Online (Sandbox Code Playgroud)printf '%s\n' "${arr[@]}"
Run Code Online (Sandbox Code Playgroud)
请注意bash(从 ksh 复制)中的数组是相当关联的数组。
a=(newvalue "$a[@]")
Run Code Online (Sandbox Code Playgroud)
将$a使用newvalueas${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")
Run Code Online (Sandbox Code Playgroud)
这就解释了为什么没有内置运算符。
如果你想插入newvalueas${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
Run Code Online (Sandbox Code Playgroud)
类似zsh或yash具有普通数组的外壳具有用于该操作的运算符:
zsh:
a[1,0]=newvalue
Run Code Online (Sandbox Code Playgroud)
(也适用于将字符串添加到标量变量)
yash:
array -i a 0 newvalue
Run Code Online (Sandbox Code Playgroud)