2017-01-09 61 views
1

假设你有一个zsh的阵列,如:如何在单个扩展中转换zsh数组元素?

a=("x y" "v w") 

我想利用每一个元素的第一个字,说:

b=() 
for e in $a; { 
    b=($b $e[(w)0]) 
} 

所以现在我有什么,我需要在B:

$ print ${(qq)b} 
'x' 'v' 

有没有办法在单个扩展表达式中执行此操作? (即不需要for循环来处理每个数组元素并将结果累加到一个新数组中)。

回答

2

这可能是可以通过从白色空间的第一次出现在阵列这样的每个元素去除到端取词:

$ print ${(qq)a%% *} 
'x' 'v' 

它coulde注意,%%表达式(和其他一些)可以用于数组元素:

在下面的表达式中,当名称为阵列,并且所述取代不是引用,或者如果使用了“(@)”标志或name[@]语法,匹配和更换被执行每个数组元素分开。
...

${name%pattern}
${name%%pattern}

如果模式名称的值的末端匹配,则删除与所述匹配部分替代名称的值;否则,只需替换名称的值即可。在第一种形式中,最小的匹配模式是优选的;在第二种形式中,最大的匹配模式是优选的。

- zshexpn(1): Expansion, Parameter Expansion

+0

谢谢!这样可行! –