Eu não acho que você possa ativar uma expansão de histórico e recuperar o resultado de dentro do zsh.
Veja uma prova de conceito para usar o módulo zpty
interagir com um processo zsh inferior, expandir as sequências de histórico e estudar o resultado (que pode ser para relatar um erro ou executar um comando). Coloque o histórico inicial que você deseja antes de cada tentativa de expansão em um arquivo chamado prior_history
.
#!/usr/bin/zsh
setopt extended_glob
zmodload zsh/zpty
zpty -b inferior_zsh 'PS1=%% PS2=\> TERM=dumb strace -eread,write -o zsh.strace zsh -f'
zpty -r inferior_zsh out $'*\r%'
zpty -w inferior_zsh 'stty -echo'
zpty -r inferior_zsh out $'*\r%'
start='mv /Volumes/hdd1/path/to/a/file.foo'
history_string='!#$:r:s/foo/bar/'
for ((i=1; i <= $#history_string; i++)) {
zpty -w inferior_zsh "fc -R prior_history"
zpty -r inferior_zsh out $'*\r%'
zpty -w inferior_zsh "print -r expansion: ${(q)start} ${history_string[1,$i]}"
zpty -r inferior_zsh out $'*\r[%>]'
out=${${out#*$'\r\r\n'}%$'\r\n'% ##$'\r\r%'}
print -r "$i ${(qqqq)out}"
}