Risposte:
arr=("new_element" "${arr[@]}")
In generale, lo faresti.
arr=("new_element1" "new_element2" "..." "new_elementN" "${arr[@]}")
arr=( "${arr[@]}" "new_element" )
O invece
arr+=( "new_element" )
In generale, lo faresti.
arr=( "${arr[@]}" "new_element1" "new_element2" "..." "new_elementN") #Or
arr+=( "new_element1" "new_element2" "..." "new_elementN" )
Diciamo che vogliamo aggiungere un elemento alla posizione di Index2 arr [2] , in realtà vorremmo fonderci sui sotto-array sottostanti:
Ottieni tutti gli elementi con Index position2 all'ultimo arr [2] , arr [3] , ....
arr=( "${arr[@]:0:2}" "new_element" "${arr[@]:2}" )
Oltre a rimuovere un elemento da un array (diciamo l'elemento 2), dobbiamo concatenare due sotto-array. Il primo sotto-array conterrà gli elementi prima dell'elemento # 2 e il secondo sotto-array conterrà gli elementi dopo l'elemento # 2.
arr=( "${arr[@]:0:2}" "${arr[@]:3}" )
${arr[@]:0:2}
otterrà due elementi arr [0] e arr [1] inizia dall'inizio dell'array.${arr[@]:3}
otterrà tutti gli elementi da index3 arr [3] all'ultimo.Un'altra possibilità per rimuovere un elemento è
Utilizzo unset
(in realtà assegna un valore "null" all'elemento)
unset arr[2]
Usa il modello di sostituzione se conosci il valore dei tuoi elementi.
arr=( "${arr[@]/PATTERN/}" )
arr+=(element)
e unset arr[2]
(che dovrebbe essere unset -v 'arr[2]'
!), Che presuppone array non sparsi. Si noti inoltre che il arr=( "${arr[@]/PATTERN/}" )
non modifica il numero di elementi. Tutto ciò che può fare è sostituirli con la stringa vuota.
Si noti che gli array in bash
(copiati da ksh) sono piuttosto array associativi.
a=(newvalue "$a[@]")
farebbe un nuovo $a
array con newvalue
as ${a[0]}
e gli elementi dell'array originale aggiunti nell'ordine numerico della loro chiave con i tasti 1, 2 ...
Ad esempio, se avessi:
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")
Questo spiega perché non esiste un operatore integrato per questo.
Se si desidera inserire un newvalue
as ${a[0]}
e spostare tutte le altre chiavi di una, sarebbe necessario un array temporaneo:
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
Le conchiglie come zsh
o yash
che hanno array normali hanno operatori per questo:
zsh
:
a[1,0]=newvalue
(funziona anche per anteporre stringhe a variabili scalari)
yash
:
array -i a 0 newvalue
# 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
}
ARRAY+=('foo')