OSX의 bash는 대소 문자를 구분하지 않습니까?


79

OSX의 bash 명령은 대소 문자를 구분하지 않습니까? 나는 "which TR"을 입력하고 / usr / bin / TR을 보여 주지만, 그러한 바이너리는 없다. 다른 바이너리에도 대문자로 입력 할 때도 마찬가지입니다. 아니면 Terminal.app이이 번역을하고 있습니까? 이것을 끄려면 어떻게해야합니까?


호기심 때문에 왜이 기능을 끄고 싶습니까?
— Sören Kuklau

이것은 놀라운 질문입니다. Bash에는 사례가 범위 내에서 일치하는지 여부를 제어 하는 nocaseglob 옵션이 있지만이 작은 속임수는 정상 locale적이고 완료 무시 무시 사례 / nocaseglob
— bmike

3
내가 그것을 끄고 싶었던 이유는 정말 바보입니다. 쉘에서 작업 할 때 대 / 소문자를 구분하는 데 익숙합니다. 이 기능으로 인해 문제가 발생할 수 있습니다. 예를 들어, bash 스크립트를 잘못 입력했습니다. 'lS'; 스크립트는 OSX에서 제대로 실행됩니다. cenTOS 상자로 옮기면 부서집니다. 물론 이것은 쉽게 감지하고 수정할 수 있지만 두 시스템간에 스크립트가 동일한 방식으로 작동하도록 유지하면 시나리오를 완전히 피할 수 있습니다. 나는 우연히 이것을 발견했고 지금까지 번거롭지 않았으므로 아마도 이것을 위해 파일 시스템 변경 연습을 거치지 않을 것입니다.
— verboze

5
이 기능을 끄려는 이유는 대소 문자를 구분하지 않으면 SVN과 같은 일부 앱에서 문제가 발생하기 때문입니다. 대소 문자를 구분하지 않는 글 로빙은 유용 할 수 있지만 "Foo"라는 파일을 생성하면 저장소가 "foo"에 대한 참조를 생성하면 SVN이 매우 혼란스러워집니다.

비활성화하는 또 다른 이유 : 1980 년경부터 경로에 ~ / bin / CC 스크립트가 있습니다. cc와 즐거운 기본값. UNIX v6에서 v7, Eunice, BSD 4.1, 4.2, 4.3, SVr4, Xenix, Gould UTX, Linux, cygwin 등을 통해 작동했으며 MacOS에서 처음으로 실패했습니다. 무한한 재귀입니다.
— Krazy Glew 2

답변:


94

이것은 실제로 bash 또는 Terminal.app가 아닌 디스크 파일 시스템의 기능입니다.

HFS + (Mac 파일 시스템)는 일반적으로 대소 문자를 구분하지 않지만 대소 문자를 유지 하도록 구성됩니다 . 이것은 파일 시스템이 고려 foo하고 FoO동일 하다는 것을 의미 하지만, 새 파일을 만들 때 대문자로 된 문자와 그렇지 않은 문자를 기억합니다.

HFS +로 디스크를 포맷 할 때 파일 시스템의 대소 문자 구분 여부를 선택할 수 있습니다. UFS (Unix FileSystem)로 포맷하도록 선택한 경우 항상 대소 문자를 구분합니다 (AFAIK).

디스크가 대소 문자를 구분하는지 확인하려면 다음을 실행하십시오.

 diskutil info <device>

예를 들면 다음과 같습니다.

 diskutil info disk0s2

Name:줄을 찾으십시오 . 이와 비슷한 것을 읽으면 Mac OS Extended (Case-sensitive, Journaled)대소 문자를 구분한다는 의미입니다. 그냥 읽지 Mac OS Extended않으면 (을 제외하고 Case-sensitive) 대소 문자 만 보존하고 대소 문자를 구분 하지 않습니다 .


6
유닉스 외부에서 자연을 보존하는 사례는 그리 특이하지 않습니다. 예를 들어 NTFS는 비슷합니다. 기본적으로 대소 문자를 구분하지 않지만 포맷 할 수는 있습니다. 또한 대소 문자를 구분하지 않는 것이 Mac OS 9을 통해 온 것이라고 생각 하지만 많은 Mac 및 Windows 개발자 가이 점에서 게으르고 올바른 대소 문자를 신경 쓰지 않는다는 사실 은 기본적으로 대소 문자를 구분 하는 것이 거의 불가능합니다 , 많은 앱을 중단시킵니다. 유닉스에서 왔을 때 처음에는 매우 이상했습니다.
— DarkDust

1
나는 클래식 맥 OS를 사용하지 않았다는 것을 인정해야한다. 어느 쪽이든, 이것이 대답이며, DarkDust는 나보다 더 잘 넣었 으므로이 생각을 받아 들여야합니다.
— stuffe

6
모든 Mac OS 버전은 사용상의 이유로 대소 문자를 구분하지만 보존했습니다. 유닉스는 정밀도 (바이트 단위의 파일 이름 비교)를 선호하지만 실수로 '재개'와 '재개'를 저장 한 다음 잘못된 버전을 열면 혼란스러워하는 최종 사용자에게는 유용하지 않은 악몽이 될 수 있습니다. .
— Dan Udey

2
다른 한편으로는 수 도 대신에 실행되는 프로그램은 / usr / 빈 / 헤드 (파일의 첫 번째 라인을 표시)에 명령 줄 결과를 "HEAD"를 입력하면 "사용성 악몽"이 지역은 / usr / / bin / HEAD (LWP에서 : HTTP 'HEAD'요청)
— TML

2
모든 대문자에 대해 하나의 소문자가 있고 그 반대의 경우도 영어를 사용하는 프로그래머에게 일반적이며 로케일 독립적이지 않다고 생각합니다. 나는 점 소문자가있는 곳에, 터키어 채택 된 내용을 솔루션 모르는 i점선 대문자에 해당하는 İ점이없는 대문자가있는 동안, I점이없는 소문자에 해당 ı하지만, 어떤 솔루션은 나쁜 것입니다. 그리고 ß종종 2 S초로 대문자 인 독일어 는 어떻습니까? 그리고 대문자를 사용할 때 종종 빠지는 악센트? 그리고 ... 대소 문자 구분은 이러한 모든 두통으로 사라집니다.
— Walter Tross 2016 년

5

HFS에는 대소 문자 구분 및 대소 문자 구분이 없으므로 파일 시스템을 살펴보십시오. 기본값은 대소 문자를 구분하지 않으며,이 경우 BASH가 아니라 기본 파일 시스템입니다. 대소 문자 구분 옵션으로 예비 USB 스틱을 포맷하고 파일을 복사하여 테스트를 반복하는 등으로이를 테스트 할 수 있습니다.



1

Bash는 대소 문자를 구분합니다.

방금 터미널에`whoami '를 입력하고 caps lock 버튼이 켜졌습니다.

`WHOAMI '와는 완전히 다른 반응을 얻었습니다.

'which'라는 WHOAMI 명령이 있지만 'ls'로는 찾을 수 없습니다.


4
쉘은 대소 문자를 구분하지 않으며 whoami프로그램 자체입니다. 실제로는와 같은 프로그램 id이지만 실행 한 이름을 확인하고 id -un"whoami"라는 이름으로 실행되는 경우 다른 출력 (과 동등한 )을 사용합니다. 이 검사는 대소 문자를 구분합니다. 의 출력을 비교 id, WHOAMI, WhOaMi, WhoAmI, 등 또한, 출력 비교 ls -li /usr/bin/whoami대를 ls -li /usr/bin/WHOAMI, 그리고 아이 노드 번호 (출력에 나열된 첫 번째 것은) 동일 있습니다 - 그들은 동일한 파일을 지정하는 두 가지 방법이야 .
— 고든 데이비슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.