2017-01-26 54 views
1

给定一个岩组阵列myarray中的zsh阵列,我可以辨认出它的一个子集阵列过滤由通配符

set -A subarray 
for el in $myarray 
do 
    if [[ $el =~ *x*y* ]] 
    then 
    subarray+=($el) 
    fi 
done 

,其在这个例子中,包含从myArray的具有某处一个X所有元素以及依次排列的一个或多个排列。

问:

鉴于zsh中可用的数组运算过多,有更简单的方式来实现这一目标?我检查了手册页和zsh-lovers page,但找不到合适的东西。

回答

3

这应该做的伎俩

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

你可以找到在zsh的手册页的[关于参数扩展部分]的解释。这是一个有点隐藏的${name:#pattern}(M)做你想要什么相反的标志:

${name:#pattern}

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