Pytanie dotyczy zmiennych specjalnych. Dokumentacja mówi:
!!:$
wyznacza ostatni argument poprzedniego polecenia . Można to skrócić do! $.
(
$_
podkreślenie.) Przy uruchamianiu powłoki ustaw bezwzględną nazwę ścieżki używaną do wywoływania powłoki lub skryptu powłoki wykonywanej tak, jak przekazano w środowisku lub liście argumentów. Następnie rozwija się do ostatniego argumentu do poprzedniego polecenia po rozwinięciu. Ustawiono również na pełną ścieżkę używaną do wywoływania każdego wykonanego polecenia i umieszczanego w środowisku eksportowanym do tego polecenia.
Musi być jakaś różnica, której nie mogę złapać, ponieważ:
$ echo "hello" > /tmp/a.txt
$ echo "!$"
echo "/tmp/a.txt"
/tmp/a.txt
$ echo "hello" > /tmp/a.txt
$ echo $_
hello
Jaka jest różnica?
$_
$_
!$