Pergunta

Eu corro o seguinte código

zgrep -c compinit /usr/share/man/man{1..9}/zsh*

I get

zsh: no matches found: /usr/share/man/man2/zsh*

Esta é estranho, já que as seguintes obras

echo Masi{1..9}/masi

Isto sugere-me que o problema pode ser um bug no Zsh.

É o acima de um bug no Zsh para {1..9}?

Foi útil?

Solução

Não é um erro, e que está trabalhando dentro de palavras muito bem. O problema que você está tendo aqui é que {1..9} não é uma expressão curinga como * é; como o seu exemplo mostra eco, é uma expansão iterativa. Portanto, o seu exemplo zgrep é exatamente o mesmo como se você tivesse digitado cada versão alternativa na linha de comando, e, em seguida, já que não há homem páginas começando com zsh em man2, ele erros fora. (É erroring para fora em uma falha para encontrar uma correspondência, não algo intrinsecamente relacionada com a sua expansão seqüência cinta.)

Se você fez isso, por outro lado:

zgrep -c compinit /usr/share/man/man[1-9]/zsh*

que você deseja obter os resultados esperados, porque [1-9] é uma expressão normal curinga.

Outras dicas

Em zsh, se você quiser usar faixas em nomes de arquivos, ofertas ZLE <1-n> sobre quaisquer nomes reais que pode expandir. Ou seja:

$ touch a0b a1b a5b a7b
$ print a<0-100>b

E <Tab> em seguida, bateu logo após o b final seria deixá-lo com print a0b a1b a5b a7b expandiu na linha.

Para todos os outros fins e propósitos - talvez requisitos de gama completa, não-arquivo e usar scripting - eu expressar isso usando o loop zsh idiomática em vez sucinta como:

for n ({1..50}); do print $n; done

permitirá que você processar toda a gama sequência de números 1 a 50 :) após o qual você pode fazer todos os tipos de coisas úteis com, como uma coleção de arquivos que ainda não existe:

arr=($(for n ({1..50}); do print /my/path/file$n.txt; done)) && print $arr[33]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top