Почему терминал чувствителен к регистру?

Когда я делаю - CD .. вместо cd ..

CD: command not found

Почему регистр терминал чувствителен, когда дело доходит до команд Linux? Я имею в виду, что вы должны иметь возможность выполнить команду либо с символами «все заглавные буквы», либо «все строчные буквы».

Я знаю, что это по какой-то причине, но мне просто интересно.

12 голосов | спросил Hussain Tamboli 4 Jpm1000000pmFri, 04 Jan 2013 15:28:15 +040013 2013, 15:28:15

8 ответов


42

В конечном счете, это был произвольный выбор, сделанный создателями Unix более четырех десятилетий назад. Они могли бы сделать так, чтобы сделать вещи нечувствительными к регистру, как создатели MS-DOS, сделанные десятилетием позже, но это также имеет свои недостатки.

Это слишком глубоко встроено в * ix-культуру, чтобы измениться сейчас. проблема с файловой системой, чувствительной к регистру, вызванная eppesuig , является лишь ее частью. macOS - которые основаны на Unix - обычно имеют файловую систему, не учитывающую регистр (но сохраняющую регистр), поэтому на таких системах команды, внешние по отношению к оболочке, фактически обрабатываются без учета регистра. Но встроенные функции, такие как cd остаются чувствительными к регистру.

Даже с файловой системой без учета регистра, история вещей вступает в сговор с вашими пожеланиями, Хуссейн. Если я набираю ls на моем Mac, я получаю список раскрашенных каталогов. Если я набираю LS, /bin/ls все еще выполняется, но список не раскрашен, потому что псевдоним, который добавляет флаг -C, зависит от регистра.

Лучше всего привыкнуть к нему. Если можете, научитесь нравиться.

ответил Warren Young 4 Jpm1000000pmFri, 04 Jan 2013 15:48:53 +040013 2013, 15:48:53
8

Это не проблема с терминалом, это функция файловой системы. Как оболочка будет искать ваши команды в файловой системе (всегда чувствительной к регистру)?

ответил eppesuig 4 Jpm1000000pmFri, 04 Jan 2013 15:32:47 +040013 2013, 15:32:47
6

Технические системы, которые я использую и уважаю, почти исключительно чувствительны к регистру: будь то ОС или язык программирования или что-то еще.

Исключения, о которых я мог думать сейчас, это теги HTML и некоторые реализации SQL и язык программирования Ada.

Даже в тех случаях, я думаю, существуют сильные тенденции на самом деле писать теги HTML в нижнем регистре и семантику SQL-запроса в верхнем регистре (и параметры заглавные). (Исправьте меня, если я ошибаюсь.) Что касается Ada, режим Emacs исправит вас, если вы, например, введите имя процедуры в нижнем регистре, хотя это не имеет значения при компиляции. Таким образом, даже когда есть беззаботность, кажется, люди соглашаются, что это плохая идея.

Причина в том, что вы получаете гораздо более выразительную силу с чувствительностью к регистру. Не только количественно - CD - один, но CD, Cd, cD и cd - четыре, но что более важно, вы можете выразить цель, выделение и т. д., используя разумно верхний и нижний регистр; Кроме того, при программировании вы улучшаете читаемость.

Интуитивно понятно, что вы не читаете hi и HI так же!

Но, чтобы дать вам пример компьютерного мира, на языке программирования Ada (с 1980-х годов) первая строка блока кода процедуры может выглядеть так:

procedure body P(SCB : in out Semaphore_Control_Block) is

, как вы видите, имена процедур и параметров заглавные, как и типы данных, все остальное имеет строчный регистр. Также обратите внимание, что имя параметра «all uppercase» указывает нам, что это аббревиатура. Теперь сравните это с

procedure body p(scb : in out semaphore_control_block) is

Это возможно, так как Ada не учитывает регистр (или, точнее, компилятор изменит его на способ в моем первом примере, но, конечно, не изменит ваш код). Или, как насчет:

PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS

Это немного смешно, я знаю; но кто-то был бы настолько глуп, чтобы писать так (ну, может быть, нет). Дело в том, что чувствительная к регистру система не только заставит людей быть последовательными, но и им будет помогать (читаемость) и использовать ее в своих интересах (пример аббревиатуры выше).

ответил Emanuel Berg 4 Jpm1000000pmFri, 04 Jan 2013 17:38:47 +040013 2013, 17:38:47
4

Это не более или менее странно, чем тот факт, что у нас есть алфавит с верхним и нижним регистром. Если вы посмотрите в /usr/bin, вы заметите (очень) несколько эксплойтов эксплойтов.

Пространство имен, чувствительное к регистру, не в два раза больше, чем нечувствительное - разница растет экспоненциально с длиной слова. Например, используя 26 символов, есть 26 ^ 3 (17576) различных возможностей в трех буквах; используя 52 (2 * 26) символов, существует 52 ^ 3 = 140608. Открытое пространство имен - хорошая вещь;)

ответил goldilocks 4 Jpm1000000pmFri, 04 Jan 2013 17:16:03 +040013 2013, 17:16:03
2

Понятие «верхний /нижний» случай может быть (и действительно) специфичным для локали, что, как и любое другое осложнение проектирования, должно быть максимально приближено к точке использования в стеке приложений, не должно быть часть ядра.

Наличие чувствительной к регистру среды позволяет обернуть ее в нечувствительную к регистру среду, но не наоборот.

ответил bobah 4 Jpm1000000pmFri, 04 Jan 2013 17:33:51 +040013 2013, 17:33:51
1

Это не терминал, это файловая система. Или в случае cd (cd - это встроенная оболочка) оболочка, чувствительная к регистру.

Возможно, это было возможно (по крайней мере, с ASCII), чтобы сделать регистр нечувствительным к регистру. Это сложнее с использованием теперь используемого юникода (независимо от того, совпадают ли два символа, может зависеть от локального).

Что с этим делать

  • Живи с ним.
  • Попробуйте эти параметры оболочки. Они дают компромисс и облегчают задачу, не вводя все проблемы нечувствительности к регистру.
    • shopt -s nocaseglob #this находится в моем ~/.bashrc
    • shopt -s nocasematch #this также будет в ~/.bashrc
    • set completion-ignore-case on #this находится в моем ~/.inputrc
ответил ctrl-alt-delor 18 PMpWed, 18 Apr 2018 12:45:22 +030045Wednesday 2018, 12:45:22
-2

В качестве отправной точки была задана причина, по которой был задан этот вопрос, и причина, по которой вы найдете много дискуссий по этому вопросу, если вы являетесь Google предметом, в этом случае чувствительность усложняет для «нормальных» людей изучение и использование языка программирования или интерфейс командной строки.

Чувствительность к регистру берет свое начало в малой мощности компьютеров в прошлом. Чтобы сделать ситуацию нечувствительной к регистру, требуется одна дополнительная операция синтаксического анализа до того, как команда была передана интерпретатору или компилятору до его выполнения, а ранние разработчики не были готовы тратить ресурсы компьютера на удобство чувствительности к регистру.

Я считаю, что в комментариях, высказанных выше, имеется ряд неправильных утверждений. Во-первых, психологи скажут вам, что люди не автоматически различают слово, написанное в буквах верхнего или нижнего регистра, или даже комбинацию двух в терминах значения слова. Случай используется в нормальных выразительных языках для передачи дополнительного значения. Например, использование заглавной буквы, начинающей слово в предложении, указывает, что это, скорее всего, собственное имя. Прописные буквы также используются для создания прозаической структуры. Например, заглавная буква используется для обозначения начала предложения. Но «Слово» и «слово» рассматриваются человеческим разумом как одно и то же.

Создатели DOS и ADA и Pascal, чтобы назвать некоторых, оценили, что чувствительность к регистру была дополнительной нагрузкой для новичка. Позже текстовые редакторы в «Интегрированных средах разработки» (IDE), распознающие резервное слово, могли бы переделать это слово так, чтобы оно соответствовало стилю; плюс отобразить его в другом цвете, чтобы слово выделялось. Поэтому аргумент о том, что чувствительность к регистру делает более понятный код, является ошибочным. Это не касается «нормальных» людей. Он просто добавляет ненужный и иногда запутывающий слой к уже сложной задаче.

Java - крайний пример очень плохого языка с точки зрения простоты использования новичком. Он обеспечивает строгую чувствительность к регистру, но, глупо, позволит программисту иметь две функции, имеющие одно и то же имя, но которые на самом деле являются разными функциями в силу того факта, что у другого есть другой набор аргументов. Действительно, Java - это такой аборт языка, который, когда университеты переходили от преподавания синтаксиса Паскаля к ученикам, проводя курсы не-компьютерных наук, скорость прохождения снизилась с 70% до 40%.

Итак, в целом, чувствительность к регистру возникла по двум причинам. Одним из них было отсутствие компьютерной власти. Во-вторых, люди, которые находят свой путь в информатике, часто находятся в аутичном спектре и не очень хорошо относятся к потребностям «нормальных» людей. Как следствие, эти люди не могут оценить, что чувствительность к регистру не нужна и препятствует обучению и использованию языка программирования.

ответил Kevin Loughrey 18 FebruaryEurope/MoscowbSat, 18 Feb 2017 23:05:47 +0300000000pmSat, 18 Feb 2017 23:05:47 +030017 2017, 23:05:47
-3

Чувствительность к регистру - глупая идея, которая возникла из-за того, что авторы Unix не понимали, что ASCII предназначен для того, чтобы быть легкочувствительным к регистру. Просто игнорируются ведущие биты. Ascii - это 7-битное кодирование с капиталом A при значении бита decimal 65 1000001 и в бит-десятичном значении 97 1100001. с буквами, указанными в алфавитном порядке. Это генерирует всевозможные идеи, такие как все ключи в парах ключевых значений, должны быть числовыми, чтобы тапочки не отличались от тапочек. База данных Multi-Value реализована с самого начала и нечувствительна к регистру.

ответил ArgoPete 23 Mayam18 2018, 01:35:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132