GNU/Linux >> Tutoriales Linux >  >> Linux

$_ Vs !$. ¿Último argumento del comando anterior y redirección de salida?

La pregunta es sobre variables especiales. La documentación dice:

!!:$

designa el último argumento del comando anterior . Esto puede
acortarse a !$ .

($_ , un guión bajo.) Al iniciar el shell, establezca la ruta de acceso absoluta utilizada para invocar el shell o el script de shell que se está ejecutando tal como se pasa en el entorno
o en la lista de argumentos. Posteriormente, se expande al último argumento del comando anterior después de la expansión. También se establece en el nombre de ruta completo utilizado para invocar cada comando ejecutado y colocado en el entorno
exportado a ese comando.

Debe haber alguna diferencia que no puedo captar, porque:

$ echo "hello" > /tmp/a.txt
$ echo "!$"
echo "/tmp/a.txt"
/tmp/a.txt

$ echo "hello" > /tmp/a.txt
$ echo $_
hello

¿Cuál es la diferencia?

Respuesta aceptada:

!$ es un indicador de palabra de la expansión del historial, se expande a la última palabra del comando anterior en historia . IOW, la última palabra de la entrada anterior en la historia. Esta palabra suele ser el último argumento del comando, pero no en caso de redirección. en:

echo "hello" > /tmp/a.txt

el comando completo 'echo "hello" > /tmp/a.txt' apareció en el historial, y /tmp/a.txt es la última palabra de ese comando.

_ es un parámetro de shell, se expande al último argumento del comando anterior. Aquí, la redirección no es parte de los argumentos pasados ​​al comando, por lo que solo hello es el argumento pasado a echo . Por eso $_ expandido a hello .

_ ya no es uno de los parámetros especiales estándar de shell. Funciona en bash , zsh , mksh y dash solo cuando es interactivo, ksh93 solo cuando dos comandos están en líneas separadas:

$ echo 1 && echo $_
1
/usr/bin/ksh

$ echo 1
1
$ echo $_
1

Linux
  1. 3 trucos para obtener la salida de múltiples comandos en la misma fila

  2. Barras y el comando rsync

  3. Almacene la salida del comando de fecha y reloj en un archivo

  4. Agregar salto de línea a la salida del comando

  5. Recorra recursivamente los directorios y ejecute un comando en un archivo en el directorio

Prettyping:haga que la salida del comando Ping sea más bonita y fácil de leer

Cómo cambiar el color de salida de 'Echo' en Linux

¿Pasar la salida del comando anterior al siguiente como argumento?

¿Cómo acceder al último argumento de un comando comentado?

Explicado:entrada, salida y redirección de errores en Linux

Ejemplos de comandos echo de Linux