¿Por qué el terminal distingue entre mayúsculas y minúsculas?

12

Cuando lo hago, en CD ..lugar de cd ..
eso me da un error al decir:

CD: command not found

¿Por qué el terminal de mayúsculas y minúsculas cuando se trata de comandos de Linux? Quiero decir que deberías poder ejecutar el comando ya sea con caracteres "todo en mayúsculas" o "todos en minúsculas".

Sé que se debe a alguna razón, pero tengo curiosidad.

Hussain Tamboli
fuente
99
Casi siento que esta pregunta debería volver a titularse ¿Por qué las cosas distinguen entre mayúsculas y minúsculas?
kojiro
15
"Quiero decir que deberías poder ejecutar el comando ya sea con" todos en mayúscula "o" todos en minúscula "caracteres". De Verdad? ¿Por qué?
dmckee --- ex gatito moderador el
55
Emite un stty iuclc olcucmensaje si te apetece tener un terminal que no
distinga entre
1
CapsLock + c + d + CapsLock es peor que c + d
UniversallyUniqueID

Respuestas:

43

En última instancia, fue una elección arbitraria hecha por los creadores de Unix hace más de cuatro décadas. Podrían haber optado por hacer las cosas que no distinguen entre mayúsculas y minúsculas, como hicieron los creadores de MS-DOS una década después, pero eso también tiene sus desventajas.

Está demasiado incrustado en la cultura * ix para cambiar ahora. El problema del sistema de archivos sensible a mayúsculas y minúsculas presentado por eppesuig es solo una parte de él. Los sistemas macOS, que están basados ​​en Unix , suelen tener sistemas de archivos que no distinguen entre mayúsculas y minúsculas (pero conservan mayúsculas y minúsculas), por lo que en dichos sistemas, los comandos externos al shell se tratan de hecho sin distinción entre mayúsculas y minúsculas. Pero, las incorporaciones comocd siguen siendo sensibles a mayúsculas y minúsculas.

Incluso con un sistema de archivos que no distingue entre mayúsculas y minúsculas, la historia de las cosas conspira contra tus deseos, Hussain. Si escribo lsen mi Mac, obtengo una lista de directorios coloreada. Si escribo en su LSlugar, /bin/lstodavía se ejecuta, pero la lista no está coloreada porque el alias que agrega la marca distingue entre -Cmayúsculas y minúsculas.

Lo mejor es que te acostumbres. Si puedes, aprende a gustar.

Warren Young
fuente
1
En realidad, los nombres de archivo de Windows pueden distinguir entre mayúsculas y minúsculas. Están en el subsistema POSIX, por ejemplo, y ver msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx
fpmurphy
3
En realidad, es sorprendente, ya que algunos terminales comunes disponibles en ese momento solo estaban en mayúsculas y tenían que implementar una solución alternativa (coloque una barra diagonal inversa antes de una letra si desea que esté realmente en mayúscula, habilitada si escribió su nombre de usuario en mayúscula cuando inició sesión en) en la línea disciplina piloto.
Random832
8

Este no es un problema de "terminal", es una característica del sistema de archivos. ¿Cómo debe buscar el shell sus comandos en el sistema de archivos (siempre sensible a mayúsculas y minúsculas)?

eppesuig
fuente
¿Y si dos o más comandos coinciden?
scai
1
La única opción que puede ayudarte un poco es una bashopción llamada cdspell: trata de encontrar el nombre de archivo correcto incluso si lo escribiste mal, pero solo funciona para argumentos de comando .
eppesuig
1
@HussainTamboli puede haber comandos nombrados cd, CD, cDy Cdcada uno con un comportamiento único.
scai
66
No es realmente una función del sistema de archivos o una función de terminal, es una función de shell. Los componentes integrados de Shell distinguen entre mayúsculas y minúsculas en un sistema de archivos que no distingue entre mayúsculas y minúsculas. Además, la mayoría de los comandos de hash de shells, por lo que los comandos nunca son realmente archivos, en realidad se extraen de un hash. Prueba hash -p /bin/hostname HOSTNAMEy ahora HOSTNAMEes el comando para /bin/hostname.
kojiro
2
Ah, también debo mencionar que puedes decirle a la mayoría de las conchas que sean menos sensibles a las mayúsculas y minúsculas. Para bash, puedes atar set completion-ignore-case on.
kojiro
6

Los sistemas técnicos que uso y respeto son casi exclusivamente sensibles a mayúsculas y minúsculas: ya sea OS o lenguaje de programación o cualquier otra cosa.

Las excepciones que se me ocurren en este momento son las etiquetas HTML y algunas implementaciones de SQL, y el lenguaje de programación Ada.

Incluso en esos casos, creo que hay fuertes tendencias a escribir etiquetas HTML en minúsculas, y la semántica de consultas SQL en mayúsculas (y los parámetros en mayúscula). (Corrígeme si me equivoco). En cuanto a Ada, el modo Emacs lo corregirá si, por ejemplo, escribe un nombre de procedimiento en minúsculas, aunque eso no importará al compilar. Por lo tanto, incluso cuando hay mayúsculas y minúsculas, parece que la gente está de acuerdo en que es una mala idea.

La razón es que obtienes mucho más poder expresivo con mayúsculas y minúsculas. No sólo cuantitativamente - CDes uno, pero CD, Cd, cD, y cdson cuatro - pero lo más importante, se puede expresar finalidad, énfasis, etc., utilizando mayúsculas y minúsculas con sensatez; Además, al programar, mejorará la legibilidad.

Intuitivamente, es evidente que usted no lee hiy HIde la misma manera!

Pero, para darle un ejemplo del mundo informático, en el lenguaje de programación Ada (de la década de 1980), la primera línea de un bloque de código de procedimiento podría verse así:

procedure body P(SCB : in out Semaphore_Control_Block) is

Como puede ver, los nombres de los procedimientos y parámetros están en mayúscula, al igual que los tipos de datos, todo lo demás está en minúsculas. También tenga en cuenta que el nombre del parámetro "todo en mayúsculas" nos dice que es un acrónimo. Ahora, compara esto con

procedure body p(scb : in out semaphore_control_block) is

Esto es posible, ya que Ada no distingue entre mayúsculas y minúsculas (o, para ser exactos, el compilador lo cambiará a la manera en mi primer ejemplo, pero por supuesto no cambiará su código). O, ¿qué tal:

PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS

Ese es un poco ridículo, lo sé; pero alguien sería lo suficientemente estúpido como para escribirlo de esa manera (bueno, tal vez no). El punto es que un sistema que distingue entre mayúsculas y minúsculas no solo obligará a las personas a ser consistentes, sino que también les ayudará (legibilidad) y lo usará en su beneficio (el ejemplo de acrónimo anterior).

Emanuel Berg
fuente
2
Pascal y Delphi también distinguen entre mayúsculas y minúsculas. Además, tener por ejemplo dos variables lengthy Lengthgeneralmente es una mala idea :)
Ajasja
@ Ajasja: Eso es interesante, porque Ada se parece mucho a Pascal. Bueno, supongo que si los contaras a todos, habría toneladas de esos lenguajes, porque hay tantos lenguajes de programación. En cuanto a la duración, por supuesto, pero posiblemente podría pensar en algún caso de este tipo: ¿qué pasa con Max (una persona) y max (una función que toma una lista de reales y devuelve el más grande)?
Emanuel Berg
Con respecto a su último ejemplo, es posible que le interese saber que el intérprete SuperBasic de QL capitalizó las palabras clave exactamente de esa manera: DEFine PROCedure Hellopor ejemplo. Solo tenía que escribir los bits en mayúscula, pero la palabra completa apareció en las listas de programas. Esto también se aplicaba REMark, y no era tan molesto ...
David Dado
4

No es más o menos extraño que el hecho de que tenemos un alfabeto en mayúsculas y minúsculas para comenzar. Si observa /usr/bin, notará que (muy) pocos ejecutables explotan las mayúsculas.

Un espacio de nombres sensible a mayúsculas y minúsculas no es solo dos veces más grande que uno insensible: la diferencia crece exponencialmente con la longitud de la palabra. Por ejemplo, usando 26 caracteres, hay 26 ^ 3 (17576) diferentes posibilidades en tres letras; usando 52 (2 * 26) caracteres hay 52 ^ 3 = 140608. Un espacio de nombres abierto es algo bueno;)

encerrada dorada
fuente
¿De dónde sacaste el 3?
ctrl-alt-delor
@ ctrl-alt-delor Es solo un ejemplo: "hay 26 ^ 3 (17576) posibilidades diferentes en tres letras ".
Ricitos
2

El concepto de mayúsculas / minúsculas puede ser (y de hecho) una cuestión específica del entorno local, que, como cualquier otra complicación de diseño, debe llevarse lo más cerca posible del punto de uso en la pila de aplicaciones, no formar parte de núcleo.

Tener un entorno sensible a mayúsculas y minúsculas permite envolverlo en un entorno insensible a mayúsculas y minúsculas, pero no al revés.

bobah
fuente
1

No es el terminal, es el sistema de archivos. O en el caso de cd(cd es un shell incorporado) el shell, que distingue entre mayúsculas y minúsculas.

Podría haber sido posible (al menos con ASCII), hacer que no distinga entre mayúsculas y minúsculas. Esto es más difícil con el Unicode ahora utilizado (si dos caracteres son iguales, puede depender de local).

Qué hacer al respecto

  • Vive con ello.
  • Prueba estas opciones de shell. Proporcionan un compromiso y facilitan las cosas, sin introducir todos los problemas de insensibilidad a las mayúsculas y minúsculas.
    • shopt -s nocaseglob # esto está en mi ~/.bashrc
    • shopt -s nocasematch #esto también estaría en ~/.bashrc
    • set completion-ignore-case on # esto está en mi ~/.inputrc
ctrl-alt-delor
fuente
-2

Como punto de partida, la razón por la que se hizo esta pregunta, y la razón por la que encontrará mucha discusión al buscar en Google el tema, es que la sensibilidad a mayúsculas y minúsculas dificulta que las personas "normales" aprendan y usen un lenguaje de programación o una línea de comando interfaz.

La sensibilidad a mayúsculas y minúsculas tiene su origen en la baja potencia de las computadoras en el pasado. Para que las cosas no fueran sensibles a mayúsculas y minúsculas, se requería una operación de análisis adicional antes de que el comando se enviara al intérprete o al compilador antes de su ejecución, y los primeros diseñadores no estaban preparados para desperdiciar la potencia de la computadora para la conveniencia de mayúsculas y minúsculas.

Creo que hay una serie de afirmaciones incorrectas en los comentarios anteriores. En primer lugar, los psicólogos le dirán que los humanos no discriminan automáticamente entre una palabra escrita en mayúsculas o minúsculas o incluso una combinación de las dos en términos del significado de la palabra. Case se usa en lenguajes expresivos normales para transmitir un significado adicional. Por ejemplo, el uso de una letra mayúscula que comienza una palabra en una oración indica que probablemente sea un nombre propio. Las letras mayúsculas también se utilizan para dar estructura en prosa. Por ejemplo, una letra mayúscula se usa para indicar el comienzo de una oración. Pero "Palabra" y "palabra" son vistas por la mente humana como que significan lo mismo.

Los creadores de DOS y de ADA y Pascal, por nombrar algunos, apreciaron que la distinción entre mayúsculas y minúsculas era una carga adicional para el principiante. Más tarde, los editores de texto en "Entornos de desarrollo integrado" (IDE), reconociendo una palabra de reserva, podrían reformular esa palabra de modo que fuera coherente con el estilo; Además, muéstrela en un color diferente para que la palabra se destaque. Entonces, el argumento de que la distinción entre mayúsculas y minúsculas hace que el código sea más legible es falso. No a las personas "normales". Simplemente agrega una capa innecesaria ya veces confusa a una tarea ya exigente.

Java es un ejemplo extremo de un lenguaje muy pobre desde el punto de vista de la facilidad de uso por parte de un principiante. Aplica una estricta distinción entre mayúsculas y minúsculas, pero, estúpidamente, permitirá que el programador tenga dos funciones, ambas con el mismo nombre, pero que en realidad son funciones diferentes en virtud del hecho de que uno tiene un conjunto diferente de argumentos sobre el otro. De hecho, Java es un aborto de un lenguaje que, cuando las universidades pasaron de enseñar la sintaxis de Pascal a los estudiantes y tomar cursos que no son de informática, la tasa de aprobación bajó del 70% al 40%.

Entonces, en resumen, la distinción entre mayúsculas y minúsculas surgió por dos razones. Uno era la falta de energía de la computadora. La segunda fue que las personas que encuentran su camino en la informática a menudo están en el espectro autista y no se relacionan bien con las necesidades de las personas "normales". Como consecuencia, estas personas no pueden apreciar que la distinción entre mayúsculas y minúsculas es innecesaria y un impedimento para aprender y usar un lenguaje de programación.

Kevin Loughrey
fuente
1
Quitaría la sección en Java porque, en mi opinión, está basada en la opinión y además del punto (la sobrecarga de métodos tiene poco que ver con la distinción entre mayúsculas y minúsculas) ... la sobrecarga de métodos / funciones también se encuentra en otros lenguajes, como C ++ y pl / sql para nombrar pero dos. En cuanto a su párrafo de psicología, creo que las fuentes serían buenas ... Finalmente, el último párrafo está, en mi opinión, también basado en opiniones y ofensivo y debería eliminarse.
thecarpy
Para que comprenda mejor por qué C y todos los lenguajes que se han generado han dañado la causa de la informática, vaya a; linkedin.com/pulse/… El núcleo de este problema, o debería decir kernel :-), es que los programadores son de un tipo de personalidad que no está preocupado por difundir conocimiento sino por hacer un trabajo. Si no está de acuerdo con lo que se ha dicho en esta publicación, presente un argumento para corroborar sus posturas. Las opiniones cuentan poco.
Kevin Loughrey
Estoy de acuerdo en que la sensibilidad a mayúsculas y minúsculas dificulta el aprendizaje. Pero tenga en cuenta que casi todo en Unix es minúscula, así que manténgalo así. Una excepción importante es que las variables de entorno son convencionalmente todas las capitales.
ctrl-alt-delor
El caso debe usarse de manera consistente y, como se dijo en esta respuesta, para transmitir información adicional, por ejemplo, variable de entorno versus variable de shell normal.
ctrl-alt-delor
-3

La distinción entre mayúsculas y minúsculas es una idea tonta que surgió porque los escritores de Unix no entendieron que ASCII está diseñado para ser fácilmente sensible a mayúsculas y minúsculas. Uno simplemente ignora los bits iniciales. Ascii es una codificación de 7 bits con A mayúscula al valor de bit decimal 65 1000001 y a al bit decimal 97 1100001. con las letras que siguen alfabéticamente. Esto generó todo tipo de ideas, como todas las claves en pares de valores clave, deben ser numéricas para evitar que las zapatillas sean diferentes a las zapatillas. La base de datos Pick Multi-Value se dio cuenta de esto desde el principio y no distingue entre mayúsculas y minúsculas.

ArgoPete
fuente
2
"Tonto" es tu opinión. Hay muy pocos hechos en esta respuesta que puedo ver. Ah, y por qué restringirse a ASCII. También hubo EBCDIC.
roaima