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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top