bash
以下は、およびで必要に応じて機能しますzsh
。
$ array=(pluto pippo)
$ delete=pluto
$ echo ${array[@]/$delete}
pippo
$ array=( "${array[@]/$delete}" ) #Quotes when working with strings
複数の要素を削除する必要がある場合:
...
$ delete=(pluto pippo)
for del in ${delete[@]}
do
array=("${array[@]/$del}") #Quotes when working with strings
done
警告
$delete
この手法は、必ずしも要素全体ではなく、要素から一致する接頭辞を実際に削除します。
アップデート
完全に一致するアイテムを実際に削除するには、配列を調べて、ターゲットを各要素と比較し、 を使用unset
して完全一致を削除する必要があります。
array=(pluto pippo bob)
delete=(pippo)
for target in "${delete[@]}"; do
for i in "${!array[@]}"; do
if [[ ${array[i]} = $target ]]; then
unset 'array[i]'
fi
done
done
これを行い、1 つ以上の要素が削除されると、インデックスは整数の連続シーケンスではなくなることに注意してください。
$ declare -p array
declare -a array=([0]="pluto" [2]="bob")
単純な事実は、配列は変更可能なデータ構造として使用するように設計されていないということです。これらは主に、区切り文字として文字を無駄にすることなく、単一の変数にアイテムのリストを格納するために使用されます (たとえば、空白を含む可能性のある文字列のリストを格納するため)。
ギャップが問題になる場合は、アレイを再構築してギャップを埋める必要があります。
for i in "${!array[@]}"; do
new_array+=( "${array[i]}" )
done
array=("${new_array[@]}")
unset new_array