给定一个Zsh数组myarray,我可以将其做成一个子集数组
set -A subarray for el in $myarray do if [[ $el =~ *x*y* ]] then subarray+=($el) fi done
在此示例中,其中包含myarray中按顺序在某处具有x和y的所有元素。
题:
鉴于zsh中可用的大量数组操作,是否有更简单的方法来实现这一点?我检查了手册页和zsh-lovers页,但是找不到合适的东西。
这应该可以解决问题
subarray=(${(M)myarray:#*x*y*z})
您可以在zsh联机帮助页的[关于参数扩展的部分]中找到说明。它有点隐藏,因为${name:#pattern}
没有该标志的(M)
作用与您想要的相反:
${name:#pattern}
如果
pattern
匹配的值name
,则替换为空字符串;否则,为空。否则,只需替换的值name
。如果name
是数组,则删除匹配的数组元素(使用该(M)
标志删除不匹配的元素)。