简单的问题:如果我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
}
尽管。