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


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.