¿Podría explicar las siguientes oraciones del manual de Bash sobre $_, especialmente las partes en negrita, tal vez con algunos ejemplos?
- Al iniciar el shell, establezca el nombre de ruta absoluto utilizado para invocar el shell o el script de shell que se ejecuta como se pasa en el entorno o la lista de argumentos . 
- Posteriormente , se expande hasta el último argumento del comando anterior, después de la expansión. 
- Establezca también el nombre de ruta completo utilizado para invocar cada comando ejecutado y colocado en el entorno exportado a ese comando . 
- Al verificar el correo , este parámetro contiene el nombre del archivo de correo. 

Respuestas:
Estoy de acuerdo, no está muy claro.
1. Al iniciar el shell,
si la
_variable estaba en el entorno que labashrecibió , labashdeja intacta.En particular, si ese
bashshell fue invocado por otrobashshell (sin embargozsh,yashy algunaskshimplementaciones también lo hacen), entonces esebashshell habrá establecido la_variable de entorno en la ruta del comando que se está ejecutando (ese es el tercer punto en su pregunta). Por ejemplo, sibashse invoca para interpretar un script como resultado de otrabashinterpretación de shell:Eso
bashhabrá pasado_=/path/to/bash-scripen el entorno dadobash-script, y ese es el valor inicial de la$_bashvariable en elbashshell que interpreta ese script.Ahora, si la aplicación que invoca no pasa una
_variable de entorno , elbashshell invocado se inicializará$_en el queargv[0]se recibe, que podría serbash,/path/to/basho/path/to/some-scripto cualquier otra cosa (en el ejemplo anterior, eso sería/bin/bashsi el she-bang del script era#! /bin/basho/path/to/bash-scriptdependiendo del sistema ).De modo que el texto es engañoso ya que describe el comportamiento de la persona que llama que
bashno tiene control. Esbashmuy posible que la aplicación que se invocó no se configure$_en absoluto (en la práctica, solo algunos shells y algunas aplicaciones interactivas raras lo hacen,execlp()por ejemplo), o podría usarlo para algo completamente diferente (por ejemplo,ksh93configurarlo*pid*/path/to/command).2. Posteriormente
El Posteriormente no está muy claro tampoco. En la práctica, eso es tan pronto como
bashinterpreta un comando simple en el entorno de shell actual.En el caso de un shell interactivo , eso estará en el primer comando simple interpretado,
/etc/bash.bashrcpor ejemplo.Por ejemplo, en el indicador de un shell interactivo:
Para un shell no interactivo , sería el primer comando en
$BASH_ENVo del código alimentado a ese shell si$BASH_ENVno está configurado.3. Cuando Bash ejecuta un comando
El tercer punto es algo diferente y se insinúa en la discusión anterior.
bash, como algunos otros shells pasarán una_variable de entorno a los comandos que ejecuta que contiene la ruta que sebashutilizó como primer argumento para lasexecve()llamadas al sistema.4. Al revisar el correo
El cuarto punto se describe con más detalles en la descripción de la
MAILPATHvariable:Ejemplo:
fuente
Prueba este sencillo ejemplo:
Ejecútelo dando la ruta absoluta (
/home/$USERNAME/test.sh); salida:Primero
$_contiene la ruta que usó para invocar el script y el segundo contiene el primer argumento en el medioecho. Para el tercer elemento de la lista, si inicia una nueva terminal y escribe echo$_, mostrará la variable que contiene laPATHque generalmente se usa para buscar e invocar comandos (en mi máquina Ubuntu) en un shell normal o ruta absoluta a su.bashrsarchivo en un shell de inicio de sesión.Para el elemento cuatro de la página de manual de bash:
fuente
echo $_esEDITOR, y ¿por qué es? ¿Qué caso sigue? (3) ¿Puede dar un ejemplo de cómo verificar los correos electrónicos y cómo usarlos$_en este caso?.bashrcy comenta cada línea allí. Mantenga solo una línea que contenga un comando similarecho "test"o similar. Guardar y cerrar. Luego correbashe inmediatamenteecho $_. Este último eco debería imprimir la prueba en la salida.MAILPATHen linuxcommand.org/lc3_man_pages/bash1.htmlPara el caso 2, un ejemplo vale más que mil palabras:
Hace lo que adivina / espera. Me da un marcador de posición simple cuando estoy en la línea de comando para evitar que tenga que repetirme.
fuente