간단한 질문: 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
}
하지만.