Como eu faço as classes de caractere glob do bash diferenciando maiúsculas de minúsculas?

4

Eu criei alguns arquivos como knob_A.png e knob_a.png e meu colega de equipe no Windows disse que isso causava problemas com o aplicativo dela. Eu decidi chamá-lo de knob_W.png em vez de knob_a.png . Então eu fiz um rsync até o nosso servidor compartilhado. Para limpar as coisas eu então fiz

rm knob_[a-d]*.png

e também removeu knob_A.png . Isso está errado como um taco de futebol.

Nem shopt -s nocaseglob nem shopt -u nocaseglob faz com que ele se comporte como eu quero.

Como posso dizer ao bash para fazer seus globs serem sensíveis a maiúsculas e minúsculas como nos velhos tempos?

    
por Mutant Bob 26.06.2017 / 17:08

2 respostas

7

O Bash está sendo sensível a maiúsculas e minúsculas aqui. O problema está na ordem de classificação dos caracteres no intervalo. Do manual do Bash ( info bash ):

The sorting order of characters in range expressions is determined by the current locale and the value of the 'LC_COLLATE' shell variable, if set.

For example, in the default C locale, '[a-dx-z]' is equivalent to '[abcdxyz]'. Many locales sort characters in dictionary order, and in these locales '[a-dx-z]' is typically not equivalent to '[abcdxyz]'; it might be equivalent to '[aBbCcDdxXyYz]', for example. To obtain the traditional interpretation of ranges in bracket expressions, you can force the use of the C locale by setting the 'LC_COLLATE' or 'LC_ALL' environment variable to the value 'C'.

Tente fazer

export LC_COLLATE=C
    
por 26.06.2017 / 17:31
1

O Bash tem uma opção de shell para preservar a correspondência de padrões, de forma que o caso não seja ignorado durante a expansão. Você pode adicionar shopt -s globasciiranges ao seu script para ativar correspondências com distinção entre maiúsculas e minúsculas e desativá-lo usando shopt -u globasciiranges . Veja Referência do Bash - Shopt Builtin

Como alternativa, você pode usar o LC_COLLATE=C listado na outra resposta, mas verifique se ele foi exportado para o seu ambiente com export LC_COLLATE

    
por 25.07.2017 / 06:00

Tags