配列から既存の要素を削除し、その後に新しい要素を追加する方法

配列から既存の要素を削除し、その後に新しい要素を追加する方法

以下は例です。多くの要素から始めることができ、現在唯一の要素として「なし」を持つ2つの配列を使用しています。既存の要素を削除してから、指定された条件が一致したときに新しい要素を追加し続ける方法はありますか?それ以外の場合は維持します。配列は変更されませんでした。

最小限のコーディングで方法を見つけてください。

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すでに初期化された配列です。我々は、値のない2つの新しい配列を定義しました。それからあなたの仕事をしなさい。配列をエコーするには、次のようにします。パラメータ拡張。配列$array_aであり、array_b印刷する最後の配列です(これは問題を解決するためのものです)コメント)。

${parameter:-word}

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

関連情報