배열 루프에서 배열에 요소를 추가합니다.

배열 루프에서 배열에 요소를 추가합니다.

Bash의 for 루프에 문제가 있습니다. 예: 배열이 있습니다 ("etc" "bin" "var"). 이 배열을 반복합니다. 하지만 루프 내부에서 배열에 일부 값을 추가하고 싶습니다. 예를 들어

array=("etc" "bin" "var")
for i in "${array[@]}"
do
echo $i
done

etc bin var이는 (물론 별도의 줄에) 표시됩니다 . 다음과 같이 추가 하면 do:

array=("etc" "bin" "var")
for i in "${array[@]}"
do
array+=("sbin")
echo $i
done

나는 원한다: ( etc bin var sbin물론 다른 라인에서).

이것은 작동하지 않습니다. 어떻게 해야 합니까?

답변1

그것~ 할 것이다"sbin"을 3번 추가하지만 동일한 루프에서 새로 추가된 "sbin"을 반복하지 않습니다.

두 번째 예 이후:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin

답변2

set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

sbin이것은 반복 가능 항목 내에 포함된 해당 목록의 끝에 조건부로 추가하여 목록을 반복합니다 sbin.

관련 정보