Impossibile far funzionare una variabile di sistema per i manuali
-
03-07-2019 - |
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?
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.