Como verificar o parâmetro do script zsh em um padrão ou não

Como verificar o parâmetro do script zsh em um padrão ou não

Um script zsh executado: script.zsh nameabc01, script.zshpreciso verificar se nameabc01está nesse padrão na*abc*ou não para continuar fazendo algo ou decidir sair do script.

Como podemos conseguir isso?

e para estender esta questão, como podemos conseguir isso verificando uma lista de padrões em um arquivo (separados por nova linha)?

Responder1

Teste se existem argumentos e se 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 recuo scripts de shell em três espaços e não, nunca coloquei *.zshextensões *.shneles) que podem ser testados:

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

Se você quiser permitir, na1abc1mas proibir, na1111111111abc1111111111você precisará usar ?em vez de *ou mudar para uma expressão regular correspondente =~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 patternfilee 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 no código existente no $fpath[-1]diretório.

informação relacionada