通过通配符过滤zsh数组

时间:2017-01-26 11:06:47

标签: zsh

给定一个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,但找不到合适的内容。

1 个答案:

答案 0 :(得分:4)

这应该可以解决问题

subarray=(${(M)myarray:#*x*y*z})

您可以在 zsh 联机帮助页的[有关参数扩展的部分]中找到解释。它有点隐藏为${name:#pattern}而没有标志(M)与您想要的相反:

  

<强> ${name:#pattern}

     

如果patternname的值匹配,则替换空字符串;否则,只需替换name的值。如果name是一个数组,则删除匹配的数组元素(使用(M)标志删除不匹配的元素。)