Когда я делаю - CD ..
вместо cd ..
этого выдает ошибку, говоря -
CD: command not found
Почему терминал чувствителен к регистру , когда речь идет о командах Linux? Я имею в виду, что вы должны быть в состоянии выполнить команду, используя символы «все прописные» или «все строчные».
Я знаю, что это по какой-то причине, но мне просто любопытно.
shell
user-interface
Хуссейн Тамболи
источник
источник
stty iuclc olcuc
если вы хотите иметь терминал без учета регистра ;-)Ответы:
В конечном счете, это был произвольный выбор, сделанный создателями Unix более четырех десятилетий назад. Они могли бы сделать вещи без учета регистра, как это сделали создатели MS-DOS десятилетие спустя, но это тоже имеет свои недостатки.
Он слишком глубоко внедрен в культуру * ix, чтобы измениться сейчас. Случае проблема чувствительной файловой системы воспитывала eppesuig только часть его. Системы macOS, основанные на Unix, обычно имеют регистронезависимые (но сохраняющие регистр) файловые системы, поэтому в таких системах команды, внешние по отношению к оболочке, фактически обрабатываются без учета регистра. Но встроенные функции вроде
cd
чувствительны к регистру.Даже с файловой системой без учета регистра история вещей сговаривается против ваших желаний, Хуссейн. Если я печатаю
ls
на своем Mac, я получаю раскрашенный каталог. Если я наберуLS
вместо этого,/bin/ls
все равно будет работать, но список не будет окрашен, потому что псевдоним, который добавляет-C
флаг, чувствителен к регистру.Лучше просто привыкнуть к этому. Если можешь, научись любить.
источник
Это не проблема «терминала», это функция файловой системы. Как оболочка должна искать ваши команды в файловой системе (всегда с учетом регистра)?
источник
bash
опция, которая называетсяcdspell
: она пытается найти правильное имя файла, даже если вы указали его неправильно, но работает только для аргументов команды .cd
,CD
,cD
иCd
каждый с уникальным поведением.hash -p /bin/hostname HOSTNAME
и сейчасHOSTNAME
это команда для/bin/hostname
.set completion-ignore-case on
.Технические системы, которые я использую и уважаю, почти всегда чувствительны к регистру: будь то ОС, язык программирования или что-то еще.
Исключения, о которых я мог подумать сейчас, - это теги HTML и некоторые реализации SQL, а также язык программирования Ada.
Даже в этих случаях, я думаю, существуют сильные тенденции к написанию HTML-тегов в нижнем регистре, а семантика SQL-запроса - в верхнем регистре (и параметры пишутся с большой буквы). (Поправьте меня, если я ошибаюсь.) Что касается Ada, режим Emacs исправит вас, если вы, например, введете имя процедуры в нижнем регистре, хотя это не имеет значения при компиляции. Таким образом, даже когда существует нечувствительность к регистру, люди соглашаются, что это плохая идея.
Причина в том, что вы получаете гораздо больше выразительной силы с учетом регистра. Не только количественно -
CD
это один, ноCD
,Cd
,cD
иcd
четверо - но что более важно, вы можете выразить цель, акцент и т.д. с использованием прописных и строчных благоразумно; Кроме того, при программировании вы улучшите читабельность.Интуитивно понятно, что вы не читаете
hi
и такHI
же!Но, чтобы дать вам пример компьютерного мира, на языке программирования Ada (с 1980-х годов) первая строка блока кода процедуры может выглядеть следующим образом:
как видите, имена процедур и параметров пишутся с большой буквы, как и типы данных, все остальное - строчные. Также обратите внимание, что имя параметра «все прописные» говорит нам, что это аббревиатура. Теперь сравните это с
Это возможно, так как Ada нечувствительна к регистру (или, если быть точным, компилятор изменит его так, как в моем первом примере, но, конечно, не изменит ваш код). Или как насчет:
Это немного смешно, я знаю; но кто-то был бы достаточно глуп, чтобы написать это таким образом (ну, возможно, нет). Дело в том, что система, учитывающая регистр, не только заставит людей быть последовательными, но и поможет им (удобочитаемость) и использует ее в своих интересах (пример аббревиатуры выше).
источник
length
и,Length
как правило, плохая идея :)DEFine PROCedure Hello
например. Вам нужно было только ввести заглавные буквы, но полное слово появилось в списках программ. Это также относится и к томуREMark
, что это не раздражало ...Это не более или менее странно, чем тот факт, что у нас есть прописные и строчные буквы алфавита. Если вы заглянете внутрь
/usr/bin
, вы заметите (очень) несколько заглавных букв использования эксплойтов.Чувствительное к регистру пространство имен не просто вдвое больше, чем нечувствительное - различие растет экспоненциально с длиной слова Например, используя 26 символов, в трех буквах есть 26 ^ 3 (17576) различных возможностей; при использовании 52 (2 * 26) символов 52 ^ 3 = 140608. Открытое пространство имен - это хорошо;)
источник
Понятие «верхний / нижний» регистр может быть (и действительно) специфичным для локали, которое, как и любое другое усложнение конструкции, следует помещать как можно ближе к точке использования в стеке приложений, а не быть частью ядро.
Наличие чувствительной к регистру среды позволяет включить ее в нечувствительную к регистру среду, но не наоборот.
источник
Это не терминал, это файловая система. Или в случае
cd
(cd - встроенная оболочка) оболочки, которая чувствительна к регистру.Можно было бы (по крайней мере, с ASCII) сделать регистр без учета регистра. Это сложнее с используемым в настоящее время юникодом (одинаковые два символа могут зависеть от локального).
Что с этим делать
shopt -s nocaseglob
# это в моем~/.bashrc
shopt -s nocasematch
# это также будет в~/.bashrc
set completion-ignore-case on
# это в моем~/.inputrc
источник
В качестве отправной точки, причина, по которой этот вопрос был задан, и причина, по которой вы найдете много дискуссий по этому вопросу, если вы будете гуглить тему, заключается в том, что чувствительность к регистру затрудняет «нормальным» людям изучение и использование языка программирования или командной строки интерфейс.
Чувствительность к регистру берет свое начало от низкой мощности компьютеров в прошлом. Чтобы сделать вещи нечувствительными к регистру, потребовалась одна дополнительная операция синтаксического анализа, прежде чем команда была передана интерпретатору или компилятору перед ее выполнением, и ранние разработчики не были готовы тратить мощность компьютера для удобства чувствительности к регистру.
Я считаю, что в комментариях, сделанных выше, есть ряд неверных утверждений. Во-первых, психологи скажут вам, что люди не делают различий между словом, написанным заглавными или строчными буквами, или даже комбинацией двух в терминах значения слова. Кейс используется в обычных выразительных языках, чтобы передать дополнительное значение. Например, использование заглавной буквы, начинающей слово в предложении, указывает, что это, скорее всего, собственное существительное. Заглавные буквы также используются, чтобы дать структуру прозы. Например, заглавная буква используется для обозначения начала предложения. Но «Слово» и «слово» рассматриваются человеческим разумом как означающие одно и то же.
Создатели DOS, ADA и Pascal, если назвать несколько, оценили, что чувствительность к регистру была дополнительным бременем для новичка. Позднее текстовые редакторы в «Интегрированных средах разработки» (IDE), распознавая резервное слово, могли переписать это слово так, чтобы оно в любом случае соответствовало стилю; Кроме того, отобразите его в другом цвете, чтобы выделить слово. Поэтому аргумент о том, что чувствительность к регистру делает код более читабельным, ошибочен. Это не для "нормальных" людей. Это просто добавляет ненужный и иногда запутанный слой к и без того сложной задаче.
Java - крайний пример очень плохого языка с точки зрения простоты использования новичком. Он обеспечивает строгую чувствительность к регистру, но, тупо, позволит программисту иметь две функции, обе с одинаковыми именами, но которые на самом деле являются разными функциями, в силу того факта, что у одного другой набор аргументов для другого. Действительно, Java - такой аборт языка, что когда университеты перешли от преподавания синтаксиса Паскаля к студентам, проводя курсы, не связанные с компьютерными науками, уровень успеваемости упал примерно с 70% до 40%.
Итак, в итоге, чувствительность к регистру возникла по двум причинам. Одним из них было отсутствие компьютерной мощности. Вторым было то, что люди, которые находят свой путь в информатику, часто относятся к аутистическому спектру и плохо относятся к потребностям «нормальных» людей. Как следствие, эти люди не могут понять, что чувствительность к регистру является и ненужной, и препятствием для изучения и использования языка программирования.
источник
Чувствительность к регистру - глупая идея, возникшая из-за того, что авторы Unix не понимали, что ASCII спроектирован так, чтобы легко учитывать регистр. Один просто игнорирует ведущие биты. Ascii - это 7-битное кодирование с заглавной буквой A в десятичном значении бита 65 1000001 и десятичным в бите 97 1100001. буквы следуют в алфавитном порядке. Это породило всевозможные идеи, такие как все ключи в парах ключ-значение должны быть числовыми, чтобы избежать различий между тапочками и тапочками. База данных Pick Multi-Value осознала это с самого начала и не учитывает регистр.
источник