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
.