Por que o script lista os diretórios começando com o primeiro maiúsculo e o segundo com todos os minúsculos?

0

O encadeamento é uma extensão de: Diretórios de listagem de scripts básicos ([: discover : operador inesperado)

Quando executo o script:

for item in *
do
   if [ -d "$item" ]
   then
      echo "$item"
   fi
done

Ele lista as pastas que foram montadas automaticamente durante a instalação do sistema (Desktop, Documentos, Downloads) ou instalações automáticas de aplicativos (Dropbox) e, em seguida, meus (dosgames), em vez de organizá-los em ordem alfabética (Desktop, Documentos, dosgames, Downloads, Dropbox).

Por que ele executa duas verificações separadas se estiver verificando uma característica comum (-d)?

A saída:

Dokumenty
Dropbox
Muzyka
Obrazy
Pobrane
Publiczny
Pulpit
Szablony
Wideo
dosgames
learning_linux
new
tset

Eu uso a versão polaca, daí os nomes dos diretórios. Estes, no entanto, são todos diretórios padrão do sistema, se não obviamente não (ex. Dropbox, dosgames)

    
por denuviel 31.07.2013 / 08:12

1 resposta

4

O shell classifica-os de acordo com a localidade definida. Em particular, é a variável LC_COLLATE que controla como as strings são classificadas. No seu caso, ele classifica os caracteres maiúsculos antes dos caracteres minúsculos, como em POSIX ou C locale (ou seja, classificados pelos valores ascii dos caracteres).

$ mkdir Dokumenty dosgames Dropbox Muzyka learning_linux
$ LC_COLLATE=en_US.utf-8; echo */
Dokumenty/ dosgames/ Dropbox/ learning_linux/ Muzyka/
$ LC_COLLATE=C; echo */
Dokumenty/ Dropbox/ Muzyka/ dosgames/ learning_linux/
    
por geirha 31.07.2013 / 09:58