일부 요소가 포함된 배열이 있지만 새 항목을 배열의 시작 부분에 푸시하고 싶습니다. 어떻게 해야 합니까?
답변1
배열의 시작 부분에 요소를 추가하려면 를 사용하세요.
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 위치에 요소를 추가한다고 가정해 보겠습니다.도착[2], 실제로 다음 하위 배열을 병합합니다.
- Indexposition2 이전의 모든 요소 가져오기도착[0]그리고도착[1];
- 배열에 요소를 추가합니다.
인덱스 위치 2부터 끝까지 모든 요소를 가져옵니다.도착[2],도착[3], ....
arr=( "${arr[@]:0:2}" "new_element" "${arr[@]:2}" )
배열에서 요소 제거
배열에서 요소(요소 #3이라고 가정)를 제거하는 것 외에도 두 개의 하위 배열을 연결해야 합니다. 첫 번째 하위 배열은 요소 #3 앞의 요소를 포함하고 두 번째 하위 배열은 요소 #3 뒤의 요소를 포함합니다.
arr=( "${arr[@]:0:2}" "${arr[@]:3}" )
${arr[@]:0:2}
두 가지 요소를 얻을 것입니다도착[0]그리고도착[1]배열의 시작 부분부터 시작합니다.${arr[@]:3}
index3에서 모든 요소를 가져옵니다.도착[3] 끝까지.가능한 편리한 방법은 요소#3(arr[2])을 제외하고 arr을 다시 빌드하는 것입니다.
del_element=3; arr=( "${arr[@]:0:$((del_element-1))}" "${arr[@]:$del_element}" )
에서 제외할 요소를 지정합니다
del_element=
.
요소를 제거하는 또 다른 방법은 다음과 같습니다.
사용
unset
(실제로 요소에 "null" 값 할당)unset -v 'arr[2]'
배열 요소의 값을 알고 있는 경우 바꾸기 모드를 사용하여 값을 자릅니다(빈 문자열로 바꿉니다).
arr=( "${arr[@]/PATTERN/}" )
인쇄 배열
printf '%s\n' "${arr[@]}"
답변2
ksh에서 복사된 배열은 bash
상당히 연관 배열입니다(키는 양의 정수로 제한됩니다.희소 배열).
a=(newvalue "$a[@]")
as를 사용하여 새 배열이 생성되고 $a
원래 배열의 요소가 키 번호 순서대로 키 1, 2...에 추가됩니다.newvalue
${a[0]}
예를 들어 다음과 같은 경우가 있습니다.
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]}
하고 다른 모든 키를 하나씩 이동 하려면 임시 배열이 필요합니다.
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
답변3
# 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
}
답변4
인덱스 배열 생성:
$ declare -a A
$ declare -p A
명령문 -a A
배열에 일부 요소를 추가합니다.
$ A+=(foo)
$ A+=(bar)
$ A+=("baz quux")
$ declare -p A
명령문 -a A=([0]="foo" [1]="bar" [2]="baz quux")
중간 요소를 제거하여 인덱스가 희박한 배열로 만듭니다.
$ unset A[1]
$ declare -p A
명령문 -a A=([0]="foo" [2]="baz quux")
드물게 인덱스된 배열에서 마지막 요소를 제거합니다.
$ unset A[-1]
$ declare -p A
명령문 -a A=([0]="foo")