Cómo comparar el parámetro del script zsh en un patrón o no

Cómo comparar el parámetro del script zsh en un patrón o no

Un script zsh que se ejecuta: script.zsh nameabc01, en el script.zshque necesito verificar si nameabc01está en este patrón na*abc*o no continuar haciendo algo o decidir salir del script.

¿Cómo podemos lograr eso?

y para ampliar esta pregunta, ¿cómo podemos lograrlo comparándolo con una lista de patrones en un archivo (separados por una nueva línea)?

Respuesta1

Pruebe que haya argumentos y que el primer argumento coincida con algún patrón global:

#!/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

(Sí, sangro los scripts de Shell en tres espacios y nunca les pongo extensiones) que se pueden probar *.zsh:*.sh

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

Si desea permitir na1abc1pero no permitir, na1111111111abc1111111111deberá usar ?en lugar de *o cambiar a una expresión regular que coincida con =~una expresión regular adecuada.

También es posible leer una lista de patrones de un archivo, pero requiere un poco más de código para la lógica necesaria.

#!/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

Y el patternfiley algunas pruebas.

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

Los documentos en zshexpn(1)y zshparam(1)probablemente estén echando un vistazo o código existente en el $fpath[-1]directorio.

información relacionada