Teste que existem argumentos e que o primeiro argumento corresponde a algum padrão 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
(Sim, eu indico scripts de shell em três espaços e não, eu nunca coloco *.zsh
ou *.sh
extensões neles) que podem ser testados:
% ./argchecker
Usage: ./argchecker na*abc* ...
% ./argchecker wombat
not ok
% ./argchecker na1abc1
% ./argchecker na1111111111abc1111111111
%
Se você quiser permitir na1abc1
, mas não permitir na1111111111abc1111111111
, será necessário usar ?
em vez de *
ou alternar para uma correspondência de expressão regular com =~
e uma expressão regular adequada.
Ler uma lista de padrões de um arquivo também é possível, mas requer um pouco mais de código para a lógica necessária.
#!/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
E o patternfile
e alguns testes.
% cat patternfile
cat*
*bat
% ./pargchecker fish
not ok
% ./pargchecker catfish
% ./pargchecker wombat
%
Os documentos em zshexpn(1)
e zshparam(1)
provavelmente funcionam como uma espiada ou código existente no diretório $fpath[-1]
.