배열에서 요소를 완전히 제거하는 방법은 무엇입니까?

배열에서 요소를 완전히 제거하는 방법은 무엇입니까?

unset array[0]요소를 제거하지만 이 작업을 수행하면 echo ${array[0]}여전히 null 값이 발생하고 이를 수행하는 다른 방법이 있지만 배열의 요소에 아래와 같은 공백이 포함된 경우

array[0]='james young'
array[1]='mary'
array[2]='randy orton'

하지만 이것들도 효과가 없을 거야

array=${array[@]:1} #removed the 1st element

이제 새 배열이 다음과 같기를 원합니다.

array[0]='mary'
array[1]='randy orton'

공백은 할당 후 문제를 일으키고 실제 배열은 대체처럼 됩니다.

array=(mary randy orton)

답변1

배열 구문을 사용하고 할당할 때 변수를 인용하세요.

array=("${array[@]:1}") #removed the 1st element

편집하다댓글의 질문을 기반으로 합니다. $@다음과 같이 사용할 수 있기 때문입니다 .

set -- "${@:2}" #removed the 1st parameter

답변2

이로 인해 생각이 들었습니다. sed/awk/tail의 문제점은 한 줄씩 작동한다는 것입니다. 첫 번째 줄을 삭제한 후 패턴 공간의 다른 모든 줄을 파일에 써야 합니다.

  • 다음 명령을 사용하면 원하는 작업을 몇 초 안에 완료할 수 있습니다.
  • 그러면 전체 파일이 배열에 기록됩니다.
  • 첫 번째 줄을 제거하면 파일에 다시 덤프됩니다.

    readarray -t aLargeFile < <(cat largefile)
    echo "${aLargeFile[@]:1}" >largefile
    

largefile파일명 으로 변경해주시면 됩니다 .

답변3

특정 인덱스의 요소를 제거하려면 unset다음을 사용하여 다른 배열에 복사할 수 있습니다. unset이 경우에는 필요하지 않습니다 . 요소가 제거되지 않기 때문에 unset빈 문자열을 배열의 특정 인덱스로 설정하기만 합니다.

declare -a arr=('aa' 'bb' 'cc' 'dd' 'ee')
unset 'arr[1]'
declare -a arr2=()
i=0
for element in ${arr[@]}
do
    arr2[$i]=$element
    ((++i))
done
echo ${arr[@]}
echo "1st val is ${arr[1]}, 2nd val is ${arr[2]}"
echo ${arr2[@]}
echo "1st val is ${arr2[1]}, 2nd val is ${arr2[2]}"

출력은 다음과 같습니다

aa cc dd ee
1st val is , 2nd val is cc
aa cc dd ee
1st val is cc, 2nd val is dd

답변4

#!/bin/bash

q=( one two three four five )

echo -e "
  (remove) { [:range:] } <- [:list:]
                | [:range:] => return list with range removed range is in the form of [:digit:]-[:digit:]
"

function remove {
  if [[ $1 =~ ([[:digit:]])(-([[:digit:]]))?   ]]; then
    from=${BASH_REMATCH[1]}
    to=${BASH_REMATCH[3]}
  else
    echo bad range
  fi;shift
  array=( ${@} )
  local start=${array[@]::${from}}
  local rest
  [ -n "$to" ] && rest=${array[@]:((${to}+1))}  || rest=${array[@]:((${from}+1))}
  echo ${start[@]} ${rest[@]}
}

q=( `remove 1 ${q[*]}` )
echo ${q[@]}
~                                                                                                                                                              
~                       

관련 정보