如何从数组中删除现有元素并随后添加新元素

如何从数组中删除现有元素并随后添加新元素

下面是一个示例,我使用两个数组,可以用许多元素启动,目前只有“无”作为唯一元素,有没有办法删除现有元素,然后在给定条件匹配时继续附加新元素否则保持数组不变。

寻找一种编码最少的方法。

array_a=(None)
array_b=(None)
declare -A DICT=([1]="source" [11]="destination" [2]="nowhere")
for index in ${!DICT[@]} ; do
  [[ ${index} =~ 1 ]] && array_a+=("${DICT[${index}]}") 
  [[ ${index} =~ 50 ]] && array_b+=("${DICT[${index}]}")
done 
echo ${array_a[@]}
echo ${array_b[@]}

输出:

None destination source        
None

预期输出:

destination source
None

我对此有一个愚蠢的解决方案

array_a=(None)
array_b=(None)
declare -A DICT=([1]="source" [11]="destination" [2]="nowhere")
a=0
b=0
for index in ${!DICT[@]} ; do
if [[ ${index} =~ 1 ]] ; then if [[ ${a} -eq 0 ]] ; then ((a++)) ; unset array_a ; fi ; array_a+=("${DICT[${index}]}") ; fi
if [[ ${index} =~ 50 ]]; then if [[ ${b} -eq 0 ]] ; then ((b++)) ;  unset array_b ; fi ; array_b+=("${DICT[${index}]}") ; fi
done 
echo ${array_a[@]}
echo ${array_b[@]}

输出:

destination source
None

答案1

用这个:

ini_array_a=(None xyz)
ini_array_b=()
array_a=()
array_b=()
[...]
array_a=(${array_a[@]:-${ini_array_a[@]}})
array_b=(${array_b[@]:-${ini_array_b[@]}})
echo ${array_a[@]:-None}
echo ${array_b[@]:-None}

地点$ini_array_a$ini_array_b是已经初始化的数组。我们定义了两个新数组,里面没有值。然后进行你的处理。要回显数组,请使用参数扩展。数组$array_aarray_b是最后要打印的数组(这是为了解决您的问题评论)。

${parameter:-word}

    If parameter is unset or null, the expansion of word is substituted.
    Otherwise, the value of parameter is substituted.

相关内容