루프 카운터 재설정

루프 카운터 재설정

간단한 질문: for신뢰할 수 없는 목록에 루프(zsh)가 있는 경우 목록에 미리 예측할 수 없는 항목이 포함되어 있다는 의미입니다. for루프 카운터를 재설정할 수 있습니까? 이것은 내 요구 사항을 증명합니다.

# e.g. list=(1 5 2 9)
for i in $list ; do
    [[ $i = 2 ]] && i=${list[1]}
done

(이 예제가 작동한다면 분명히 영원히 반복될 것입니다.)

나는 이것을 할 생각만 할 수 있습니다 :

for ((j=1; j<=${#list}; j++)); do
    [[ ${list[$j]} = 2 ]] && j=1
done

더 쉬운 방법이 있나요? ("더 쉽다"는 것은 눈으로 하고 있는 일을 따라가기가 더 쉽다는 것을 의미합니다.)

답변1

다음을 수행할 수 있습니다.

alias   forever='while ((1))' \
      try-again='continue 2'  \
        ok-done='break'

forever {
  for i ("$list[@]") {
    (( i == 2 )) && try-again
  }
  ok-done
}

빈 요소를 생략하지 않으려면 "$list[@]"대신 필요합니다.$list

다음보다 더 명확해지지 않습니다:

for ((i = 1; i <= $#list; i++)) {
  (( list[i] == 2 )) && i=1
}

하지만.

관련 정보