Para un contexto adicional, hice esta pregunta antes, y pensé que entendía las cosas, pero ya no.
Sé que echoignora stdin. Yo sé que stdin, stderry stdoutexisto y, en este contexto, no sé que las "cosas" que no sean éstos existen.
Entonces, si echoignora stdin, ¿de dónde obtiene su entrada? Parece stdin, stdouty stderrno cuentan toda la historia.

echoobtiene toda la información que necesita de los argumentos que se le pasan.echoobtiene información del argv (argumentos de línea de comando, una de las propiedades del proceso).Respuestas:
No estoy seguro de entender la fuente de su confusión, pero tenga en cuenta que en Unix los argumentos de la línea de comandos (el
fooybardeecho foo bar) y las cadenas de entorno (elFOO=bardeenv - FOO=bar printenv) simplemente son copiados por el núcleo en el espacio de direcciones del proceso, donde simplemente se accede como cualquier otra memoria (a través de punteros, etc.); no se pasan como archivos que podrían ser leídos, escritos o mapeados en memoria por el proceso, como lo son los stdin estándar, stdout, stderr o cualquier descriptor de archivo adicional.Esta no es una ley de la naturaleza, es solo cómo funciona en Unix. Se podría argumentar que esto es arcaico, inconsistente e ineficiente (se hace una copia de todo el entorno para cada proceso, incluso si se ignora todo o la mayor parte).
Se pueden hacer diferentes arreglos: en el plan9 , las cadenas de entorno son en realidad archivos
/env(lo que también significa que se pueden compartir entre procesos).Además, se
LD_PRELOADpodría usar un hack en Linux para evitar el límite argv + env al pasar todo a través de un archivo creado conmemfd_create.fuente
echo foo bar, esto se ingresa de acuerdo con la definición del diccionario. Ahora los recursos mencionanstdin,stderrystdoutnada más (no se cuenta toda la historia) y no sé cómo dar sentido a esto.fooybarhacia dónde van?