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

1

Um script zsh que é executado: script.zsh nameabc01 , em script.zsh eu preciso verificar se if nameabc01 está neste padrão na*abc* ou não continuar fazer 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)?

    
por Tuyen Pham 27.08.2018 / 17:18

1 resposta

2

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] .

    
por 27.08.2018 / 20:18