zsh 스크립트 실행: 이 모드에 있는지 확인하거나 script.zsh nameabc01
작업 을 진행하지 않거나 스크립트를 종료할지 결정해야 합니다.script.zsh
nameabc01
na*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]