给定一个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 page,但找不到合适的内容。
答案 0 :(得分:4)
这应该可以解决问题
subarray=(${(M)myarray:#*x*y*z})
您可以在 zsh 联机帮助页的[有关参数扩展的部分]中找到解释。它有点隐藏为${name:#pattern}
而没有标志(M)
与您想要的相反:
<强>
${name:#pattern}
强>如果
pattern
与name
的值匹配,则替换空字符串;否则,只需替换name
的值。如果name
是一个数组,则删除匹配的数组元素(使用(M)
标志删除不匹配的元素。)