Básicamente, es el último argumento del comando anterior.
!$
es el "fin" del comando anterior. Considere el siguiente ejemplo: Comenzamos buscando una palabra en un archivo:
grep -i joe /some/long/directory/structure/user-lists/list-15
Si Joe está en esa lista de usuarios, queremos eliminarlo. Podemos activar vi con ese árbol de directorios largo como argumento, o simplemente como vi !$
Which bash se expande a:
vi /some/long/directory/structure/user-lists/list-15
( fuente ; guía práctica, por cierto)
No vale nada la distinción entre este !$
token y la variable de shell especial $_
. De hecho, ambos se expanden al último argumento del comando anterior. Sin embargo, !$
se expande durante la expansión del historial , mientras que $_
se expande durante la expansión de parámetros . Una consecuencia importante de esto es que, cuando usa !$
, el comando expandido se guarda en su historial.
Por ejemplo, considere las pulsaciones de teclas
(Los únicos caracteres cambiados son $!
y $_
en el medio).
En el primero, cuando presiona Up, se lee la línea de comando echo Foo Jar
, por lo que la última línea escrita en stdout es Foo Jar
.
En el último, cuando presiona Up, la línea de comando se lee echo $_ bar
, pero ahora $_
tiene un valor diferente al que tenía anteriormente; de hecho, $_
es ahora Jar
, por lo que la última línea escrita en stdout es Jar Jar
.
Otra consecuencia es que _
puede usarse en otras expansiones de parámetros, por ejemplo, la secuencia de comandos
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
impresiones isomorphism isosceles
. Pero no hay una " ${!$%morphism}
" expansión análoga .
Para obtener más información sobre las fases de expansión en Bash, consulte la EXPANSION
sección deman 1 bash
(esto se llama Expansiones de Shell en la edición en línea). La HISTORY EXPANSION
sección está separada.
echo
algo si no está seguro de lo que hará.