zsh 배열에서 패턴 일치 수 계산

zsh 배열에서 패턴 일치 수 계산

나는 제안과 비슷한 것을 찾고 있습니다.이 답변:

rRiIzsh 배열이 주어지면 패턴과 일치하는 요소 수를 계산하고 싶습니다( 아래 첨자 플래그 처럼 첫 번째/마지막 일치 또는 첫 번째/마지막 일치의 인덱스를 가져오는 대신 ).

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

관련 정보