터미널이 대소 문자를 구분하는 이유는 무엇입니까?


13

내가 할 때- CD ..대신 cd ..
오류가 발생합니다.

CD: command not found

리눅스 명령 에서 터미널이 대소 문자를 구분 하는 이유는 무엇 입니까? "모든 대문자"또는 "모든 소문자"문자로 명령을 실행할 수 있어야합니다.

나는 그것이 어떤 이유로 인한 것이라는 것을 알고 있지만, 나는 단지 궁금합니다.


9
나는이 질문에 제목을 바꾸어야한다고 생각합니다. 왜 대소 문자를 구분합니까?
kojiro

15
""모든 대문자 "또는"모든 소문자 "문자를 사용하여 명령을 실행할 수 있어야합니다." 정말? 왜?
dmckee --- 전 운영자 고양이

5
을 실행 stty iuclc olcuc하면 대소 문자를 구분 터미널 ;-)있는 같이 느끼는 경우에
스테판 Chazelas가

1
CapsLock 키 + C + D + CapsLock 키는 C의 + d를보다 더 나쁜입니다
UniversallyUniqueID

답변:


43

궁극적으로, 그것은 40 년 전에 유닉스 제작자들이 임의로 선택한 것입니다. 그들은 MS-DOS 제작자가 10 년 후에 한 것처럼 대소 문자를 구분하지 않도록 선택할 수 있었지만 단점도 있습니다.

* ix 문화에 너무 깊이 포함되어있어 지금은 바꿀 수 없습니다. eppesuig에 의해 제기 대소 문자 구분 파일 시스템의 문제는 그것의 일부에 불과합니다. 유닉스 기반의 macOS 시스템 일반적으로 대소 문자를 구분하지 않지만 (대소 문자를 보존하는) 파일 시스템을 가지므로 이러한 시스템에서 쉘 외부의 명령은 실제로 대소 문자를 구분하지 않습니다. 그러나 내장cd 은 대소 문자를 구분합니다.

대소 문자를 구분하지 않는 파일 시스템을 사용하더라도 사물의 역사는 당신의 희망에 반합니다. lsMac에 입력 하면 색상이 지정된 디렉토리 목록이 표시됩니다. LS대신 입력 하면 /bin/ls여전히 실행되지만 -C플래그 를 추가하는 별칭 은 대소 문자를 구분 하므로 목록에 색상이 지정되지 않습니다 .

최선을 다해 익숙해 지십시오. 가능하다면 좋아하는 법을 배우십시오.


1
실제로 Windows 파일 이름은 대소 문자를 구분할 수 있습니다. 예를 들어 POSIX 하위 시스템에 있으며 msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx
fpmurphy

3
시간에 사용할 수있는 몇 가지 일반적인 터미널이 대문자 만에 있었고, 그들은 당신이 원하는 경우 문자 앞에 백 슬래시를 넣어 (해결 방법을 구현했기 때문에 사실은 놀라운 정말 당신이 로그인 할 때 모든 대문자로 사용자 이름을 입력하면 사용 가능 - 대문자 in) 라인 훈련 드라이버에서.
Random832

8

이것은 "터미널"문제가 아니라 파일 시스템 기능입니다. 쉘은 항상 대소 문자를 구분하는 파일 시스템에서 명령을 어떻게 찾아야합니까?


둘 이상의 명령이 일치하면 어떻게됩니까?
scai

1
약간 도움이 될 수있는 유일한 옵션은 다음과 같은 bash옵션입니다 cdspell. 파일 이름을 잘못 입력하더라도 올바른 파일 이름을 찾으려고하지만 명령 인수 에서만 작동합니다 .
eppesuig 2018 년

1
@HussainTamboli 이름 cdCD, cDCd각각 고유 한 동작을 갖는 명령이있을 수 있습니다 .
scai

6
실제로 파일 시스템 기능이나 터미널 기능이 아닙니다 – 쉘 기능입니다. 쉘 내장은 대소 문자를 구분하지 않는 파일 시스템에서 대소 문자를 구분합니다. 또한 대부분의 쉘은 해시 명령이므로 명령은 실제로 파일 이 아니며 실제로 해시에서 가져옵니다. 시도 hash -p /bin/hostname HOSTNAME하고 지금 HOSTNAME명령입니다 /bin/hostname.
kojiro

2
또한 대부분의 쉘이 대소 문자를 덜 구분하도록 말할 수 있다는 점도 언급해야합니다. bash의 경우 바인딩 할 수 있습니다 set completion-ignore-case on.
kojiro

6

내가 사용하고 존중하는 기술 시스템은 거의 독점적으로 대소 문자를 구분합니다. OS 나 프로그래밍 언어 또는 다른 것입니다.

내가 지금 생각할 수있는 예외는 HTML 태그와 일부 SQL 구현 및 Ada 프로그래밍 언어입니다.

이러한 경우에도 실제로 HTML 태그를 소문자로 작성하고 SQL 쿼리 의미를 대문자로 사용하고 매개 변수를 대문자로 쓰는 경향이 강하다고 생각합니다. Ada의 경우 Emacs 모드는 컴파일 할 때 중요하지 않지만 소문자 절차 이름을 입력하는 경우와 같이 수정합니다. 따라서 대소 문자를 구분하지 않아도 사람들은 그것이 나쁜 생각이라는 데 동의합니다.

그 이유는 대소 문자를 구분하여 표현력이 훨씬 뛰어 나기 때문입니다. 뿐만 아니라 정량적 - CD하나이지만 CD, Cd, cD, 그리고 cd네입니다 -하지만 더 중요한 것은, 당신은 대문자 사용 등 목적, 중점을 표현하고 현명 소문자; 또한 프로그래밍 할 때 가독성이 향상됩니다.

직관적으로, 당신이 읽을하지 않는 것이 분명하다 hiHI같은 방법으로!

그러나 컴퓨터 언어의 예를 들어, 프로그래밍 언어 Ada (1980 년대)에서 프로 시저 코드 블록의 첫 번째 줄은 다음과 같습니다.

procedure body P(SCB : in out Semaphore_Control_Block) is

보시다시피, 프로 시저 및 매개 변수 이름은 데이터 유형과 같이 대문자로 표시되며 나머지는 모두 소문자입니다. 또한 "모두 대문자"매개 변수 이름은 이것이 약어임을 나타냅니다. 자, 이것을 이것과 비교하십시오

procedure body p(scb : in out semaphore_control_block) is

이것은 Ada가 대소 문자를 구분하지 않기 때문에 가능합니다 (또는 정확히 말하면 컴파일러는 첫 번째 예제에서 방식을 변경하지만 물론 코드는 변경하지 않습니다). 또는 어떻습니까 :

PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS

그거 조금 말도 안 돼요. 그러나 누군가는 그런 식으로 글을 쓸만큼 어리 석을 것입니다. 요점은 대소 문자를 구분하는 시스템은 사람들이 일관성을 갖도록 강요 할뿐만 아니라 시스템의 도움을 받아 (가독성) 도움이 될 것입니다 (위의 약어 예).


2
파스칼과 델파이도 대소 문자를 구분하지 않습니다. 또한, 예를 들어 두 개의 변수를 가지고 length와 것은 Length: 일반적으로 나쁜 생각
Ajasja

@Ajasja : Ada는 Pascal과 비슷하기 때문에 흥미 롭습니다. 글쎄, 당신이 그것들을 모두 세었다면, 프로그래밍 언어가 너무 많기 때문에 그러한 언어가 많이있을 것입니다. 물론 길이에 관해서는-그러나 당신은 아마도 그런 경우를 생각할 수 있습니다 : Max (사람)와 max (실제 목록을 취하고 가장 큰 것을 반환하는 함수)는 어떻습니까?
Emanuel Berg

마지막 예와 관련하여 QL의 SuperBasic 인터프리터가 키워드를 정확하게 다음과 같은 방식으로 대문자로 표시 한 것을 알고 자합니다 DEFine PROCedure Hello. 대문자 로만 입력 하면되지만 전체 단어가 프로그램 목록에 나타납니다. 이것도 REMark역시 적용되었고 , 그렇게 성가신 것은 아니 었습니다.
David David은

4

대문자와 소문자 알파벳이 있다는 사실보다 더 이상 이상하지 않습니다. 에서 살펴보면 /usr/bin대문자를 악용하는 (매우) 실행 파일이 거의 없다는 것을 알 수 있습니다.

대소 문자를 구분하는 네임 스페이스는 둔감 한 네임 스페이스의 두 배가 아니라 단어 길이에 따라 차이가 기하 급수적으로 증가합니다. 예를 들어 26자를 사용하면 세 글자에 26 ^ 3 (17576)의 다른 가능성이 있습니다. 52 (2 * 26)자를 사용하면 52 ^ 3 = 140608이 있습니다. 열린 네임 스페이스는 좋은 것입니다.)


3을 어디서 얻었습니까?
ctrl-alt-delor

@ ctrl-alt-delor 이것은 단지 예일뿐입니다 : " 세 글자에 26 ^ 3 (17576)의 다른 가능성 이 있습니다 ".
금발 미녀

2

"상한 / 하한"사례의 개념은 로케일 특정 일 수 있으며 실제로는 다른 설계 복잡성으로 인해 애플리케이션 스택에서 가능한 한 사용 지점에 가깝게 밀려 나야합니다. 핵심.

대소 문자를 구분하는 환경이 있으면 대소 문자를 구분하지 않는 환경으로 래핑 할 수 있지만 다른 방법은 없습니다.


1

터미널이 아니라 파일 시스템입니다. 또는 cd쉘이 내장 되어있는 경우 (cd는 내장 쉘임) 대소 문자를 구분합니다.

대소 문자를 구분하지 않고 (ASCII에서는 가능) 가능할 수 있습니다. 이제는 현재 사용되는 유니 코드를 사용하기가 더 어렵습니다 (두 문자가 동일하든 로컬에 따라 다를 수 있음).

그것에 대해해야 할 일

  • 함께 살아라.
  • 이 쉘 옵션을 사용해보십시오. 대소 문자를 구분하지 않고 문제를 해결하지 않고도 타협하고 일을 더 쉽게 만듭니다.
    • shopt -s nocaseglob # 이것은 내 안에 ~/.bashrc
    • shopt -s nocasematch # 이것은 또한 ~/.bashrc
    • set completion-ignore-case on # 이것은 내 안에 ~/.inputrc

-2

시작점으로,이 질문이 제기 된 이유와 Google이 주제를 다루는 경우 이에 대해 많은 토론을하는 이유는 대소 문자 구분으로 인해 "정상적인"사람들이 프로그래밍 언어 나 명령 줄을 배우고 사용하기가 더 어려워지기 때문입니다. 상호 작용.

대소 문자 구분은 과거 컴퓨터의 저전력에서 시작되었습니다. 대소 문자를 구분하지 않으려면 명령이 인터프리터 또는 컴파일러에 전달되기 전에 추가 구문 분석 작업이 필요했으며 초기 설계자는 대소 문자를 구분하기 위해 컴퓨터의 전원을 낭비 할 준비가되지 않았습니다.

위에서 언급 한 의견에는 여러 가지 잘못된 주장이 있다고 생각합니다. 첫째, 심리학자들은 인간이 대문자 또는 소문자로 쓰여진 단어 또는 단어의 의미 측면에서 두 단어의 조합을 자동으로 구별하지 않는다고 말합니다. 케이스는 일반적인 표현 언어로 사용되어 추가 의미를 전달합니다. 예를 들어, 문장에서 단어를 시작하는 대문자를 사용하면 가장 적절한 명사 일 수 있습니다. 대문자는 또한 산문 구조를 제공하는 데 사용됩니다. 예를 들어, 대문자는 문장의 시작을 나타내는 데 사용됩니다. 그러나 "단어"와 "단어"는 인간의 마음에 의해 동일한 의미로 간주됩니다.

DOS와 ADA, Pascal을 만든 사람들은 대소 문자 구분이 초보자에게 추가적인 부담이라는 점을 높이 평가했습니다. 나중에 "통합 개발 환경"(IDE)의 텍스트 편집기는 예약어를 인식하여 어쨌든 스타일과 일치하도록 해당 단어를 다시 변환 할 수있었습니다. 단어가 눈에 띄도록 다른 색상으로 표시하십시오. 따라서 대소 문자를 구분하여 더 읽기 쉬운 코드를 만들 수 있다는 주장은 잘못된 것입니다. 사람들을 "정상"하지 않습니다. 이미 까다로운 작업에 불필요하고 때로는 혼란스러운 레이어를 추가하기 만하면됩니다.

Java는 초보자가 사용하기 쉽다는 관점에서 열악한 언어의 극단적 인 예입니다. 대소 문자를 엄격하게 구분하지만 어리석게도 프로그래머는 동일한 이름을 가진 두 가지 기능을 가질 수 있지만 실제로는 다른 인수 집합을 가지고 있다는 사실 때문에 실제로 다른 기능입니다. 실제로, 자바는 대학이 파스칼 구문을 가르치는 것에서 학생들로 컴퓨터가 아닌 과학 과정을 옮길 때 통과율이 약 70 %에서 40 %로 떨어진 언어의 낙태입니다.

결론적으로, 대소 문자 구분은 두 가지 이유로 발생했습니다. 하나는 컴퓨터 전원이 부족했습니다. 두 번째는 컴퓨터 과학에 종사하는 사람들이 종종 자폐 스펙트럼에 속하며 "정상적인"사람들의 요구와 잘 관련이 없다는 것입니다. 결과적으로,이 사람들은 대소 문자 구분이 불필요하며 프로그래밍 언어를 배우고 사용하는 데 방해가된다는 것을 이해할 수 없습니다.


1
Java에 대한 섹션은 imho, 의견 기반이며 요점 외에도 (메소드 오버로드는 대 / 소문자 구분과 거의 관련이 없기 때문에) 섹션을 제거합니다 ... 메소드 / 함수 오버로드는 C ++과 같은 다른 언어에서도 발견됩니다 이름은 pl / sql이지만 둘입니다. 당신의 심리학 단락에 관해서는 소스가 좋을 것이라고 생각합니다 ... 마지막으로, 마지막 단락은 imho, 의견 기반 및 공격적이며 제거되어야합니다.
thecarpy

C와 그로 인해 생성 된 모든 언어가 컴퓨터 과학의 원인을 손상시킨 이유를 더 잘 이해하려면 다음으로 이동하십시오. linkedin.com/pulse/… 이 문제의 핵심, 또는 커널 :-)이라고 말하면 프로그래머는 지식 확산에 관심이 없지만 업무 수행에 관심이있는 성격 유형이라는 것입니다. 이 게시물에 언급 된 내용에 동의하지 않는 경우, 귀하의 입장을 입증 할 주장을 제시하십시오. 의견은 거의 중요하지 않습니다.
Kevin Loughrey 10

대소 문자를 구분하면 학습이 어려워진다는 데 동의합니다. 그러나 유닉스의 거의 모든 것이 소문자이므로 그렇게 유지하십시오. 주요 예외는 환경 변수가 일반적으로 모든 자본입니다.
ctrl-alt-delor

사례는 일관성있게 사용해야 하며이 답변에서 말한 것처럼 추가 정보 (예 : 환경 변수 대 일반 쉘 변수)를 전달합니다.
ctrl-alt-delor

-3

대 / 소문자 구분은 Unix 작성자가 ASCII가 대 / 소문자를 구분하지 않도록 설계되었다는 것을 이해하지 못했기 때문에 어리석은 생각입니다. 하나는 단순히 선행 비트를 무시합니다. Ascii는 비트 값 10 진수 65 1000001 및 비트 10 진수 97 1100001에서 대문자 A를 사용하는 7 비트 코딩입니다. 이것은 슬리퍼와 슬리퍼가 다르지 않도록 키 값 쌍의 모든 키와 같은 모든 종류의 아이디어를 생성했습니다. Pick Multi-Value 데이터베이스는 처음부터이를 실현했으며 대소 문자를 구분하지 않습니다.


2
"실리"는 당신의 의견입니다. 이 대답에는 내가 볼 수있는 사실이 거의 없습니다. 아, 왜 자신을 ASCII로 제한합니까? EBCDIC도있었습니다.
roaima
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.