Por que eu recebo este erro usando {1..9} no zsh?
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}?
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]