
Un script zsh que se ejecuta: script.zsh nameabc01
, en el script.zsh
que necesito verificar si nameabc01
está 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 na1abc1
pero no permitir, na1111111111abc1111111111
deberá 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 patternfile
y 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.