pax*_*blo 26
您可以使用反向订阅:
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
Run Code Online (Sandbox Code Playgroud)
你会发现man zshparam
下面的数据Subscript Flags
(至少在zsh 4.3.10
下面Ubuntu 10.10
).
或者(感谢geekosaur),您可以使用:
pax$ if [[ ${foo[(i)b]} -le ${#foo} ]] ; then ; echo yes ; else ; echo no ; fi
Run Code Online (Sandbox Code Playgroud)
您只需执行以下操作即可看到从这两个表达式中获得的内容:
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
Run Code Online (Sandbox Code Playgroud)
blu*_*yed 19
(( ${foo[(I)b]} )) \
&& echo "it's in" \
|| echo "it's somewhere else maybe"
Run Code Online (Sandbox Code Playgroud)
如果找到匹配项,反向下标将始终返回某些内容,如果找不到匹配项,则不返回任何内容。我们可以使用它来进一步简化答案。
$ foo=(a b c)
$ [[ -n "${foo[(r)b]}" ]] && echo 'b was found.' || echo 'b was not found.'
b was found.
$ [[ -n "${foo[(r)d]}" ]] && echo 'd was found.' || echo 'd was not found.'
d was not found.
Run Code Online (Sandbox Code Playgroud)