Antworten:
arr=("new_element" "${arr[@]}")
Im Allgemeinen würden Sie tun.
arr=("new_element1" "new_element2" "..." "new_elementN" "${arr[@]}")
arr=( "${arr[@]}" "new_element" )
Oder stattdessen
arr+=( "new_element" )
Im Allgemeinen würden Sie tun.
arr=( "${arr[@]}" "new_element1" "new_element2" "..." "new_elementN") #Or
arr+=( "new_element1" "new_element2" "..." "new_elementN" )
Nehmen wir an, wir möchten der Position von Index2 arr [2] ein Element hinzufügen , das wir tatsächlich in den folgenden Unterarrays zusammenführen:
Holen Sie sich alle Elemente mit Index position2 zum letzten arr [2] , arr [3] , ....
arr=( "${arr[@]:0:2}" "new_element" "${arr[@]:2}" )
Zusätzlich zum Entfernen eines Elements aus einem Array (z. B. Element Nr. 2) müssen zwei Unterarrays verkettet werden. Das erste Unterarray enthält die Elemente vor Element 2 und das zweite Unterarray enthält die Elemente nach Element 2.
arr=( "${arr[@]:0:2}" "${arr[@]:3}" )
${arr[@]:0:2}
erhält zwei Elemente arr [0] und arr [1] beginnt am Anfang des Arrays.${arr[@]:3}
Liefert alle Elemente von index3 arr [3] bis zum letzten.Eine andere Möglichkeit, ein Element zu entfernen, ist
Using unset
(ordne dem Element tatsächlich den Wert 'null' zu)
unset arr[2]
Verwenden Sie das Ersetzungsmuster, wenn Sie den Wert Ihrer Elemente kennen.
arr=( "${arr[@]/PATTERN/}" )
arr+=(element)
und unset arr[2]
(was sein sollte unset -v 'arr[2]'
!) Nicht-spärliche Arrays vorausgesetzt werden. Beachten Sie auch, dass arr=( "${arr[@]/PATTERN/}" )
sich die Anzahl der Elemente nicht ändert. Alles was es tun kann, ist sie durch die leere Zeichenkette zu ersetzen.
Beachten Sie, dass Arrays in bash
(kopiert von ksh) eher assoziative Arrays sind.
a=(newvalue "$a[@]")
würde ein neues $a
Array mit newvalue
as erstellen ${a[0]}
und die Elemente des ursprünglichen Arrays in der numerischen Reihenfolge ihres Schlüssels mit den Schlüsseln 1, 2 anhängen ...
Zum Beispiel, wenn Sie:
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")
Das erklärt, warum es dafür keinen eingebauten Operator gibt.
Wenn Sie newvalue
as einfügen ${a[0]}
und alle anderen Tasten um eins verschieben möchten, benötigen Sie ein temporäres Array:
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
Shells wie zsh
oder yash
die normale Arrays haben Operatoren dafür:
zsh
:
a[1,0]=newvalue
(Funktioniert auch, wenn skalaren Variablen Zeichenfolgen vorangestellt werden)
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')