No comando:
echo "!$"
!$
é expandido em bash
antes de passar para echo
. Dentro de aspas duplas , se habilitado, a expansão do histórico será executada, a menos que você escape de !
, usando barra invertida \
. bash
tinha feito a expansão, echo
não faz nada aqui, apenas imprime o que tem.
! $ refere-se ao último argumento do anterior comando, que é a string '!$'
.
No seu segundo exemplo:
$ echo '!$'
!$
$ echo "!echo "!$""
echo "echo '!$' "'!$'""
echo '!$' !$
Comando echo "echo '!$' "'!$'""
, os argumentos passados para echo
estão divididos em três partes:
- Primeiro:
"echo '!$' "
, expandido para a stringecho '!$'
. - Segundo:
'!$'
, expandido para a string!$
. - Terceiro:
""
expandido para string vazia.