%2C%20un%20operador%20o%20un%20comando%3F.png)
No encuentro ninguna documentación oficial que se refiera a ello como uno u otro. De todos modos, ¿cuál es exactamente la distinción técnica entre un comando y un operador?
Respuesta1
El texto en POSIX lo enumera en2.6 Ampliaciones de palabras, junto con Expansión de Tilde, Expansión de Parámetros, Expansión Aritmética, División de Campo, Expansión de Nombre de Ruta y Eliminación de Citas.
De manera similar, el manual de Bash lo enumera enExpansiones de caparazón.
El primero usa "operador" para los operadores de redirección, y ;
, &
, |
, &&
, ||
etc. (
, por lo que no es uno de ellos. Obviamente, tampoco es un comando, por lo que, por mucho o poco que importe la terminología, debo decir que no es ninguna de esas dos cosas.
Respuesta2
Un comando:
normalmente tiene una cadena alfanumérica para su nombre.
es una utilidad externa, una incorporada o una función. Casi cualquier cosa para la que el
type
incorporado produzca resultados es un comando en ese sentido.tieneprefijonotación.
normalmente cambia algún tipo de E/S.
Un operador:
normalmente es una cadena simbólica y puede que no tenga nombre, pero puede tener un apodo.
no es entendido por el
type
sistema integrado (a menos que haya alguna función o script con un nombre confuso).más a menudo tieneinfijoosufijosintaxis.
A veces dirige las E/S como un policía de tráfico, pero no cambia lo que está sucediendo.enél.
A veces dirige el orden de los procesos.
$()
es un comandosustitución:
- En primer lugar (o al final, dependiendo de cómo lo miremos), es una cadena.
- la cadena está formada por el textoproducciónde los comandos enumerados dentro.
[
es un comando incorporado del shell:
- es el
test
comando con un]
sufijo obligatorio.
[[
es una bash
palabra clave de shell:
- Es como una
[
función incorporada más versátil y rápida, pero SFAIK sintest
el comando correspondiente. Las palabras clave del shell incluyen cosas como
time
yfor
, que parecen comandos pero se comportan más como operadores que requieren varias palabras clave hermanas como delimitadores y sintaxis. Este código ejecuta latype
función incorporada en la salida de lahelp
función incorporada, que muestra una lista de palabras clave y funciones incorporadas del lado izquierdo:COLUMNS=30 help -m | tail -n +9 | tee >(cut -d ' ' -f2) >(cut -c 17-30 | cut -d ' ' -f1) > /dev/null | sort | sed -n "s/.*/type '&'/e"';/found/!p'
Comparándolo con un idioma hablado:
- Los comandos (y algunas palabras clave) son como verbos.
- archivos y cadenas son sustantivos.
- Los operadores son como la puntuación y las preposiciones.
En abstracto, los operadores son sólo comandos con una sintaxis diferente que podrían reemplazarse con comandos similares.prefijocomandos de estilo junto con el resto de ellos. Probablemente no sería tan cómodo de usar.
Analíticamente, el código compilado de un shell podría ejecutarse a través de un desensamblador, y los operadores son nuevamente solo comandos, o más bien una serie de comandos en lenguaje ensamblador.
Respuesta3
Desde la perspectiva del usuario, una sustitución de comando es una especie de primitiva de shell. Es una característica implementada en el shell que realiza varias acciones (lanza un subshell, ejecuta un comando...) y devuelve un valor (la salida del comando). Antes de que el shell realice expansiones, una sustitución de comando suele ser el argumento de un comando. En otras palabras, el usuario obtiene el resultado de un proceso de shell utilizando una función de shell.