ordem de expansão alfabética para *

3

Quando estou usando um shell compatível com POSIX (es: dash, bash, zsh, ...) posso ter certeza de que * sempre será expandido em ordem alfabética (ditada por LC_COLLATE )?

exemplo:

$ echo 1 > file_a
$ echo 2 > file_b
$ echo 3 > file_c
$ cat *
1
2
3
    
por S1cK94 18.11.2015 / 08:33

2 respostas

2

Esse comportamento é exigido pelo POSIX e você pode confiar em isso.

Outra observação de que você deseja definir sua localidade como C para obter um comportamento consistente. Na localidade com elementos de agrupamento com a mesma ordem de classificação, você terá resultado estranho .

No sistema GNU com localidade UTF-8:

$ printf '%b\n' '\U2461' '\U2460' | sort
②
①

ou:

$ printf '%s\n' A B a b | sort
a
A
b
B

Definindo como C locale:

$ printf '%b\n' '\U2461' '\U2460' | LC_ALL=C sort
①
②

$ printf '%s\n' A B a b | LC_ALL=C sort
A
B
a
b

Algumas camadas ainda não suportam caracteres multibyte como dash , mksh ou suporte, mas irão se sufocar em sequências inválidas de bytes como yash .

    
por 18.11.2015 / 08:44
1

Sim. A resposta normativa pode ser encontrada aqui:

If the pattern matches any existing filenames or pathnames, the pattern shall be replaced with those filenames and pathnames, sorted according to the collating sequence in effect in the current locale.

    
por 18.11.2015 / 08:37