POSIX 호환 셸(예: dash, bash, zsh...)을 사용할 때 항상 알파벳순으로 확장되는지 확인할 수 있습니까 *
( 에서 결정 LC_COLLATE
)?
예:
$ echo 1 > file_a
$ echo 2 > file_b
$ echo 3 > file_c
$ cat *
1
2
3
답변1
이 행동은POSIX 요구 사항, 안심하고 신뢰할 수 있습니다.
C
또한 일관된 동작을 얻으 려면 로케일을 설정해야 합니다 . 로케일에서 동일한 정렬 순서를 갖는 데이터 정렬 요소를 사용하면 다음과 같습니다.이상한 결과.
UTF-8 로케일을 사용하는 GNU 시스템:
$ printf '%b\n' '\U2461' '\U2460' | sort
②
①
또는:
$ printf '%s\n' A B a b | sort
a
A
b
B
로캘 설정 C
:
$ printf '%b\n' '\U2461' '\U2460' | LC_ALL=C sort
①
②
$ printf '%s\n' A B a b | LC_ALL=C sort
A
B
a
b
일부 쉘은 멀티바이트 문자(예: )를 지원하지 않거나 dash
지원 mksh
하지만 유효하지 않은 바이트 시퀀스(예: )를 차단합니다 yash
.
답변2
예. 정식 답변은 여기에서 찾을 수 있습니다.
패턴이 기존 파일 이름 또는 경로 이름과 일치하는 경우 패턴은 해당 파일 이름 및 경로 이름으로 대체되어야 합니다.현재 로케일에서 유효한 조합 순서에 따라 정렬.