Domanda

Ho la seguente variabile di sistema in .zshrc

manuals='/usr/share/man/man<1-9>'

Corro senza successo

zgrep -c compinit $manuals/zsh*

Ottengo

zsh: no matches found: /usr/share/man/man<1-9>/zsh*

Il comando dovrebbe essere lo stesso del comando seguente che funziona

zgrep -c compinit /usr/share/man/man<1-9>/zsh*

Come puoi eseguire il comando sopra con una variabile di sistema in Zsh?

È stato utile?

Soluzione

Dalle mie indagini, sembra che zsh esegua <> sostituzione prima $ sostituzione. Ciò significa che quando si utilizza la variante $manuals, prima prova <=> sostituzione (non c'è nulla) quindi <=> sostituzione (che funziona), e si rimane con la stringa contenente i <=> caratteri.

Quando non si utilizza <=>, tenta innanzitutto la sostituzione <=> e funziona. È una questione di ordine. La versione finale di seguito mostra come rinviare l'espansione in modo che avvengano contemporaneamente:

Questi possono essere visti qui:

> 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

Altri suggerimenti

Prova:

$> manuals=/usr/share/man/man<0-9>
$> zgrep -c compinit ${~manuals}/zsh*

'~' dice a zsh di eseguire l'espansione di <0-9> quando si usa la variabile. La scheda di riferimento zsh ti dice come fare questo e altro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top