私は提案に似たものを探しています。この回答:
rRiI
zsh配列が与えられたら、パターンに一致する要素の数を計算したいと思います(下付き文字フラグのように、最初/最後の一致または最初の/最後の一致のインデックスを取得する代わりに)。
myarray=(-test.list -test.v -c spam fiddle)
if ((${myarray[(I)-test.*]})); then
echo "there is at least one test flag"
echo "there are <solution here> test flags"
if ((<solution here> >= 5)); then
echo "seriously, there are many test flags"
fi
fi
理想的には、スライスと組み合わせて可能でなければなりません。
if ((${array[2,$end][(I)-test.*]})); then
echo "there are <solution> test flag(s) in the range I consider interesting"
fi
答え1
3つを結合するパラメータ拡張特徴:
${…:#PATTERN}
一致する要素をフィルタリングしますPATTERN
。(M)
一致する要素を保持します(このフラグがない場合、フィルタは一致する要素を削除します)。${#…}
計算結果要素。
if [[ -n ${(M)myarray:#-test.*} ]]; then
echo "there are ${(M)#myarray:#-test.*} test flags"
…
下付き文字と組み合わせることもできます。
% echo ${(M)#myarray[1,-1]:#-test*}
2
% echo ${(M)#myarray[2,-1]:#-test*}
1