2017-01-26 99 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)標誌刪除不匹配的元素)。