Ответ 1
Вы можете использовать обратную подпитку:
pax$ foo=(a b c)
pax$ if [[ ${foo[(r)b]} == b ]] ; then ; echo yes ; else ; echo no ; fi
yes
pax$ if [[ ${foo[(r)x]} == x ]] ; then ; echo yes ; else ; echo no ; fi
no
В Subscript Flags
вы найдете ссылки на man zshparam
(по крайней мере, в zsh 4.3.10
в разделе Ubuntu 10.10
).
В качестве альтернативы (спасибо geekosaur), вы можете использовать:
pax$ if [[ ${foo[(i)b]} -le ${#foo} ]] ; then ; echo yes ; else ; echo no ; fi
Вы можете видеть, что вы получаете из этих двух выражений, просто делая:
pax$ echo ${foo[(i)a]} ${#foo}
1 3
pax$ echo ${foo[(i)b]} ${#foo}
2 3
pax$ echo ${foo[(i)c]} ${#foo}
3 3
pax$ echo ${foo[(i)d]} ${#foo}
4 3