패턴에서 zsh 스크립트의 매개변수를 확인하는 방법

패턴에서 zsh 스크립트의 매개변수를 확인하는 방법

다음을 실행하는 zsh 스크립트는 이 패턴에 있는지 확인하거나 script.zsh nameabc01작업 을 계속하지 않거나 스크립트를 종료하기로 결정해야 합니다.script.zshnameabc01na*abc*

우리는 어떻게 그것을 달성할 수 있습니까?

이 질문을 확장하려면 파일의 패턴 목록(개행으로 구분)을 확인하여 어떻게 이를 달성할 수 있습니까?

답변1

인수가 있고 첫 번째 인수가 일부 glob 패턴과 일치하는지 테스트합니다.

#!/usr/bin/env zsh
if (( # == 0 )); then
   print >&2 "Usage: $0 na*abc* ..."
   exit 1
fi
if [[ $1 != na*abc* ]]; then
   print >&2 "not ok"
   exit 1
fi

(예, 쉘 스크립트를 공백 세 개로 들여쓰고, 절대로 확장 *.zsh이나 *.sh확장을 넣지 않습니다.) 테스트할 수 있습니다.

% ./argchecker
Usage: ./argchecker na*abc* ...
% ./argchecker wombat
not ok
% ./argchecker na1abc1
% ./argchecker na1111111111abc1111111111
% 

허용하고 싶지만 na1abc1허용하지 않는 경우 정규식 일치 및 적합한 정규식 대신 사용 하거나 전환 na1111111111abc1111111111해야 합니다 .?*=~

파일에서 패턴 목록을 읽는 것도 가능하지만 필요한 논리를 위해서는 약간 더 많은 코드가 필요합니다.

#!/usr/bin/env zsh
if (( # == 0 )); then
   print >&2 "Usage: $0 todofixme ..."
   exit 1
fi
globs=(${(f)"$(< patternfile)"})
ret=1
for g in $globs; do
    if [[ $1 == $~g ]]; then
       ret=0
       break
    fi
done
if (( ret == 1 )); then
   print >&2 "not ok"
   exit 1
fi

그리고 patternfile몇 가지 테스트.

% cat patternfile
cat*
*bat
% ./pargchecker fish
not ok
% ./pargchecker catfish
% ./pargchecker wombat
% 

zshexpn(1)및 의 문서는 zshparam(1)아마도 디렉터리의 기존 코드나 엿보기 작업일 것입니다 $fpath[-1].

관련 정보