Si bien esa es una primera aproximación justa cuando uno comienza a aprender los conceptos básicos del uso de shells, en el nivel de "así es como se ejecuta un programa" y "así es como se ejecutan varios programas uno tras otro en una sola línea" , en realidad no es cierto.
La explicación más difícil de entender para un principiante pero más correcta es que el lenguaje shell es un lenguaje de computadora . Tiene una sintaxis . Esa sintaxis comprende varios elementos léxicos que incluyen (entre otras cosas) nuevas líneas, operadores, palabras y palabras reservadas.
if
, then
, else
, Y fi
son todas las palabras reservadas . Tienen un significado particular al analizar la entrada que se le da a un shell, de acuerdo con su gramática . Del mismo modo, ;
es un operador separador .
Por lo tanto, la entrada en el lenguaje shell es, en su conjunto, un programa informático interpretado por otro programa, un intérprete , el shell. Sus partes gramaticales individuales no son programas. El lenguaje de shell es una forma de especificar (otros) programas para que se ejecute el shell.
[
no es un elemento léxico especial en la gramática de la shell, como un operador. Es una palabra ordinaria , que nombra uno de esos programas llamado [
. Muchos shells tienen una versión integrada de este programa, combinada con el código del propio programa de shell, pero también puede encontrar un programa externo con este nombre en algún lugar como /bin/[
o /usr/bin/[
, qué programas que no sean shells pueden invocar. Igualmente, ]
tampoco es un elemento léxico especial de shell. Es una palabra ordinaria, que se convierte en un argumento para el [
programa. El [
programa requiere que su argumento final, cuando se ejecuta, sea ]
, el cual procede a ignorar.
Otro programa similar nombrado en su pregunta es echo
. Nuevamente, la mayoría de los shells tienen una versión incorporada de este programa. Pero, de nuevo, también hay una versión externa del programa, en algún lugar como /bin/echo
o /usr/bin/echo
, para que invoquen otros programas que no sean shells.
Un tercer programa nombrado en su pregunta es ls
. Los shells generalmente no tienen versiones integradas de este programa, y es un programa externo que se puede encontrar en algún lugar como /bin/ls
o /usr/bin/ls
.
Para el shell Bourne Again, puede leer más sobre esto en las Características básicas del shell de la documentación de información del shell GNU Bourne Again. Otras conchas tienen diferentes gramáticas, naturalmente. La especificación Single Unix describe una sintaxis a la que se supone que se adhieren todos los shells conformes con POSIX (en sus modos conformes con POSIX).
Otras lecturas
- " Gramática de Shell ". Lenguaje de comandos de shell . Especificaciones básicas Problema 7. El grupo abierto. IEEE 1003.1-2008. ISBN 1937218812.
test
. Utilidades . Especificaciones básicas Problema 7. El grupo abierto. IEEE 1003.1-2008. ISBN 1937218812.
- " Gramática de Shell ". El manual de Z Shell . versión 5.3.1. 2017