Com o bash você pode fazer quase o que está pedindo assim:
echo !echo:$
Então quando você faz
echo This is fun
ls
echo !echo:$
a última linha gera fun
. *
em vez de $
produz todos os argumentos para o comando correspondente; então
echo This is fun
ls
echo !echo:*
gera novamente This is fun
; mas você também pode fazer
!echo
neste caso.
Isso não se limita a repetir os argumentos de um comando com o mesmo comando:
printf !echo:*
Consulte o manual de referência da bash para obter detalhes. Você pode até combinar isso com a opção histverify
shell para dar a você a chance de verificar o comando antes de ser executado, o que o aproxima do preenchimento baseado em histórico interativo do teclado.
Expansões da história podem ser usadas em qualquer lugar; por exemplo, por exemplo
lastechoargs="!echo:*"
armazenou todos os argumentos no último comando echo
na variável lastechoargs
.
Isso também funciona para comandos completos; digamos, por exemplo, que você elaborou um comando git
complexo e deseja salvá-lo em um arquivo:
echo !git > mygitcommand
Ou você deseja arquivar alguns diretórios, mas decide excluir alguns arquivos primeiro:
ls dir1 dir2
rm dir2/somefile
tar cpzf archive.tar.gz !ls:*