tornando o bash case insensitive
Escrito por meleu em 28 Jun 2017Eu 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