簡単な質問: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
}
しかし。