No se puede conseguir que una variable del sistema funcione para los manuales
-
03-07-2019 - |
Pregunta
Tengo la siguiente variable de sistema en .zshrc
manuals='/usr/share/man/man<1-9>'
corro sin éxito
zgrep -c compinit $manuals/zsh*
yo obtengo
zsh: no matches found: /usr/share/man/man<1-9>/zsh*
El comando debe ser el mismo que el siguiente comando que funciona
zgrep -c compinit /usr/share/man/man<1-9>/zsh*
¿Cómo se puede ejecutar el comando anterior con una variable del sistema en Zsh?
Solución
Según mis investigaciones, parece que zsh funciona <>
sustitución antes $
sustitución.Eso significa que cuando usas el $
variante, primero intenta <>
sustitución (no hay nada allí) entonces $
sustitución (que funciona), y te quedas con la cadena que contiene el <>
caracteres.
Cuando no usas $manuals
, primero intenta <>
sustitución y funciona.Es una cuestión de orden.La versión final a continuación muestra cómo diferir la expansión para que ocurran al mismo tiempo:
Estos se pueden ver aquí:
> manuals='/usr/share/man/man<1-9>'
> echo $manuals
/usr/share/man/man<1-9>
> echo /usr/share/man/man<1-9>
/usr/share/man/man1 /usr/share/man/man2 /usr/share/man/man3
/usr/share/man/man4 /usr/share/man/man5 /usr/share/man/man6
/usr/share/man/man7 /usr/share/man/man8
> echo $~manuals
/usr/share/man/man1 /usr/share/man/man2 /usr/share/man/man3
/usr/share/man/man4 /usr/share/man/man5 /usr/share/man/man6
/usr/share/man/man7 /usr/share/man/man8
Otros consejos
Prueba:
$> manuals=/usr/share/man/man<0-9>
$> zgrep -c compinit ${~manuals}/zsh*
El '~' le dice a zsh que realice la expansión de <0-9>
cuando usa la variable. La tarjeta de referencia de zsh le dice cómo hacer esto y más.