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.