A questão é sobre variáveis especiais. A documentação diz:
!!:$
designa o último argumento do comando anterior . Isso pode ser reduzido para! $.
(
$_
, um sublinhado.) Na inicialização do shell, defina o nome do caminho absoluto usado para chamar o shell ou script de shell sendo executado conforme passado na lista de ambiente ou argumento. Posteriormente, expande para o último argumento para o comando anterior após a expansão. Defina também o nome do caminho completo usado para chamar cada comando executado e colocado no ambiente exportado para esse comando.
Deve haver alguma diferença que não consigo captar, porque:
$ echo "hello" > /tmp/a.txt
$ echo "!$"
echo "/tmp/a.txt"
/tmp/a.txt
$ echo "hello" > /tmp/a.txt
$ echo $_
hello
Qual é a diferença?
$_
. Isso é crucial. Pode não explicar a diferença que o intriga, mas explica várias outras maneiras $_
e !$
não são as mesmas.