배열의 루프에서 배열에 요소를 추가하십시오.


9

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
반복하는 것을 변경하는 것은 항상 위험한 제안입니다. 뒤로 물러서서 이해가
될만한

답변:


6

그것은 것입니다 예상대로 3 배 "sbin에"추가하지만, 새로 추가 된 "sbin에"이 같은 루프이야 이상은 반복 처리는하지 않습니다.

두 번째 예 후 :

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

예, 그렇습니다. 그러나 같은 루프에 추가해야합니다. :)
damekr

for그런 다음 두 개의 루프를 사용하십시오 . 먼저 추가를 수행 한 다음 결과를 반복하십시오.
PSkocik

1
왜 루프에 sbin을 추가하고 싶은지 모르겠습니다. 한 번만 추가하면 더 의미가 있습니다.array+=(sbin); for i in ...
PSkocik

for 루프에 있기 때문에이 for 루프에 의해 복사되는 일부 파일에 내용이 있는지 확인해야합니다 ..
damekr

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

목록을 반복하고 목록 sbin의 끝에 조건부 sbin로 고정하고 반복 가능한 내용에 포함시킵니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.