É perigoso ter sempre extglob?

7

Se eu ativar extglob para fazer coisas como

shopt -s extglob
rm !(*.html|*.txt) # remove everything except html and txt files

É insensato manter extglob depois disso? Há alguma ressalva de tê-lo em todo o tempo?

    
por PetaspeedBeaver 16.04.2016 / 18:09

1 resposta

13

Não, não é perigoso. A opção extglob não aumenta o risco de causar dano acidental. A única razão pela qual ele não está habilitado por padrão é para compatibilidade com versões anteriores do bash, e mesmo assim, os casos em que ele quebra a compatibilidade são muito improváveis, porque a maior parte do que extglob habilita é um erro de sintaxe se não está definido devido ao parêntese de abertura que ocorre em uma palavra.

$ bash -c $'echo /@(u|v)*' 
bash: -c: line 0: syntax error near unexpected token '('
bash: -c: line 0: 'echo /@(u|v)*'
$ bash -c $'shopt -s extglob\necho /@(u|v)*'
/usr /var

O único caso em que consigo pensar onde quebra a compatibilidade com o bash -without-extglob e POSIX sh é quando um padrão é expandido de uma variável. Os padrões extglob são incomuns em nomes de arquivos, então é improvável que isso seja um problema na prática.

 $ bash -c $'shopt -s extglob\necho $0' '/@(u|v)*'
/usr /var
$ bash -c $'echo $0' '/@(u|v)*'
/@(u|v)*

As incompatibilidades são suficientemente benignas para que o ksh tenha esses padrões habilitados por padrão, e versões recentes do bash podem ser compiladas com a opção ativada por padrão ( ./configure --enable-extended-glob-default ).

    
por 16.04.2016 / 20:04