2017-01-09 1 views
1

はあなたのようなzshの配列があるだろう:zsh配列要素を1回の展開でどのように変換できますか?

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

私はすべての要素の最初の単語を取りたいが、言う:

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

だから今、私は私がBに必要なものを持っている:

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

1つの展開式でこれを行う方法はありますか? (すなわち、各アレイ要素を処理し、結果を新しい配列に蓄積するためにforループを必要としない)。

答えて

2

はこのような配列の各要素に端部にホワイトスペースの最初の発生から除去することにより、単語を取ることが可能であってもよい。なおcoulde

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

その%%式(以下の式で

、名前が配列され、置換が引用されていない、または「(@)」フラグまたはname[@]構文が使用される場合、一致と:といくつかの他のもの)は、配列要素を使用することができます交換が行われます各配列要素は別々に
...

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

パターンは、名前の値の終わりと一致する場合、削除された一致部分と名前の値を代入。それ以外の場合は、nameの値を置き換えます。第1の形態では、最も小さいマッチングパターンが好ましい。第2の形態では、最も大きいマッチングパターンが好ましい。

からzshexpn(1): Expansion, Parameter Expansion

+0

ありがとう!それは動作します! –

関連する問題