我有一个包含一些元素的数组,但我想将新项目推送到数组的开头;我怎么做?
答案1
要将元素添加到数组的开头,请使用。
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 的位置添加一个元素到达[2],我们实际上会合并以下子数组:
- 获取Indexposition2之前的所有元素到达[0]和到达[1];
- 向数组添加一个元素;
获取索引位置2到最后的所有元素到达[2],到达[3], ....
arr=( "${arr[@]:0:2}" "new_element" "${arr[@]:2}" )
从数组中删除一个元素
除了从数组中删除一个元素(假设元素#3)之外,我们还需要连接两个子数组。第一个子数组将保存元素 #3 之前的元素,第二个子数组将包含元素 #3 之后的元素。
arr=( "${arr[@]:0:2}" "${arr[@]:3}" )
${arr[@]:0:2}
将会得到两个元素到达[0]和到达[1]从数组的开头开始。${arr[@]:3}
将从index3获取所有元素到达[3] 到最后。一种可能的便捷方法是重建 arr,排除 element#3 (arr[2]):
del_element=3; arr=( "${arr[@]:0:$((del_element-1))}" "${arr[@]:$del_element}" )
指定要在 中排除的元素
del_element=
。
删除元素的另一种可能性是
使用
unset
(实际上为元素分配“null”值)unset -v 'arr[2]'
如果您知道数组元素的值,请使用替换模式来截断其值(用空字符串替换)。
arr=( "${arr[@]/PATTERN/}" )
打印数组
printf '%s\n' "${arr[@]}"
答案2
请注意,(从 ksh 复制)中的数组bash
是相当关联的数组(键仅限于正整数,也称为稀疏数组)。
a=(newvalue "$a[@]")
将使用as创建一个新$a
数组,并将原始数组的元素按其键的数字顺序附加到键 1, 2...newvalue
${a[0]}
例如,如果您有:
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
像或那样具有普通数组的shellyash
有相应的运算符:
zsh
:a[1,0]=newvalue
(也适用于将字符串添加到标量变量之前)
yash
:array -i a 0 newvalue
答案3
# 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
}
答案4
创建索引数组:
$ declare -a A
$ declare -p A
声明-a A
向数组添加一些元素:
$ A+=(foo)
$ A+=(bar)
$ A+=("baz quux")
$ declare -p A
声明 -a A=([0]="foo" [1]="bar" [2]="baz quux")
删除中间元素,使其成为稀疏索引数组:
$ unset A[1]
$ declare -p A
声明 -a A=([0]="foo" [2]="baz quux")
从稀疏索引数组中删除最后一个元素:
$ unset A[-1]
$ declare -p A
声明 -a A=([0]="foo")