zsh: há algum problema em sempre ativar o glob estendido?

1

Eu finalmente me deparei com

setopt extended_glob

... para ativar a globbing estendida, que permite várias adições de curingas legais, como excluir padrões específicos, por exemplo:

ls ^foo*

... usará ls em todos os caminhos em seu diretório atual, exceto nos padrões que correspondem a foo* .

Eu encontrei um tutorial sugerindo colocar setopt extended_glob dentro de seu .zshrc , mas eu acho que muitos modelos de configuração zsh não percebem essa opção e a opção sendo desativada por padrão tem algumas desvantagens ou até mesmo efeitos colaterais?

Ou é absolutamente inofensivo sempre ativar extended_glob colocando-o dentro de seu .zshrc ?

    
por daniel451 17.03.2018 / 18:40

1 resposta

4

Eu diria que o problema potencial é que ^ é um caractere bastante válido em nomes de arquivos, então o significado de um padrão que o contém muda dependendo se a opção está configurada ou não:

$ touch 'foo' 'bar' '^foo' '^bar'
$ ls ^foo*
^foo
$ setopt extendedglob
$ ls ^foo*           
bar  ^bar  ^foo

Um shell padrão levaria o ^ como um caractere comum, portanto, o recurso provavelmente está desativado por padrão para compatibilidade.

Desde que você se lembre de quais opções estão ativadas, ou seja, como o shell interpreta as globs, deixar extended_glob ativado não deve ser um problema no uso interativo.

Para scripts que não esperam, mas usam nomes de arquivos estranhos, isso seria um problema, mas os shells não interativos não deveriam ler .zshrc , então configurá-lo deve estar ok. Apenas não o defina em .zshenv .

Os globs estendidos no estilo ksh ( @(...|...) etc., setopt kshglob ) têm um problema semelhante, pois entram em conflito com o modo como zsh manipula parênteses em globs. @(f|b) significa coisas diferentes, dependendo de se kshglob está definido ou não.

    
por 17.03.2018 / 21:00