回答:
arr=("new_element" "${arr[@]}")
一般的にはそうするでしょう。
arr=("new_element1" "new_element2" "..." "new_elementN" "${arr[@]}")
arr=( "${arr[@]}" "new_element" )
または代わりに
arr+=( "new_element" )
一般的にはそうするでしょう。
arr=( "${arr[@]}" "new_element1" "new_element2" "..." "new_elementN") #Or
arr+=( "new_element1" "new_element2" "..." "new_elementN" )
Index2 arr [2]の位置に要素を追加したいとしましょう。実際には、下のサブ配列でマージします。
Index position2から最後のarr [2]、arr [3]、... までのすべての要素を取得します。
arr=( "${arr[@]:0:2}" "new_element" "${arr[@]:2}" )
配列から要素を削除することに加えて(要素#2としましょう)、2つのサブ配列を連結する必要があります。最初のサブ配列には要素#2の前の要素が保持され、2番目のサブ配列には要素#2の後の要素が含まれます。
arr=( "${arr[@]:0:2}" "${arr[@]:3}" )
${arr[@]:0:2}
2つの要素arr [0]を取得し、arr [1]は配列の先頭から始まります。${arr[@]:3}
index3 arr [3] から最後までのすべての要素を取得します。要素を削除する別の可能性は
使用unset
(要素に「null」値を実際に割り当てます)
unset arr[2]
要素の値がわかっている場合は、置換パターンを使用します。
arr=( "${arr[@]/PATTERN/}" )
arr+=(element)
and unset arr[2]
(これはunset -v 'arr[2]'
!でなければなりません)を除いて、スパースではない配列を想定していることに注意してください。また、arr=( "${arr[@]/PATTERN/}" )
は要素の数を変更しないことに注意してください。できることは、それらを空の文字列に置き換えることだけです。
bash
(kshからコピーされた)の配列は、むしろ連想配列であることに注意してください。
a=(newvalue "$a[@]")
新たになるだろう$a
とのアレイnewvalue
として${a[0]}
、およびキー1,2とのキーの番号順に添付元の配列の要素を...
たとえば、次の場合:
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")
それが、そのための組み込み演算子がない理由を説明しています。
newvalue
as を挿入し${a[0]}
、他のすべてのキーを1つずつシフトする場合は、一時配列が必要です。
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
通常の配列のようなシェルにはzsh
、yash
そのための演算子があります:
zsh
:
a[1,0]=newvalue
(文字列をスカラー変数に追加する場合にも機能します)
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')