tornando o bash case insensitive

Eu estava precisando fazer um script checar o conteúdo de um arquivo e tomar certas ações se o conteúdo fosse CD. Para fazer o bash considerar CD, Cd e cd a mesma coisa, eu setei o nocasematch.

shopt -s nocasematch

Executando o comando abaixo podemos observar que funciona como esperado

[[ CD == cd ]] && echo OK

O problema é que alguns dos arquivos estava escrito CD e outros estava escrito Compact Disc. E então eu gostaria que o script considerasse CD, cd, Compact Disc, Compact disc e compact disc a mesma coisa. Nesse caso uma expressão regular seria mais útil, e para deixá-la case-insensitive eu setei o nocaseglob:

shopt -s nocaseglob

Testes para ver que funciona:

[[ CD =~ ^(cd|compact disc)$ ]] && echo OK

[[ "Compact Disc" =~ ^(cd|compact disc)$ ]] && echo OK

[[ "CoMpAcT dIsC" =~ ^(cd|compact disc)$ ]] && echo OK

Aprendi isso enquanto estive escrevendo este script: https://github.com/meleu/used2betxt/blob/master/Used2BeTXT.sh


tags: Linux

comments powered by Disqus