Você parece estar um pouco confuso sobre o que é uma variável de shell e o que não é. Todas as variáveis no seu post são variáveis de ambiente, não variáveis de shell. Para definir uma variável de shell:
foo=bar
Para definir uma variável de ambiente:
export FOO=BAR
(ou setenv em c shells). Mas em
FOO=BAR command
a atribuição contraintuitivamente tem um significado diferente de antes e define uma variável de ambiente apenas no ambiente do comando. Dito isto, este simples script deve responder às suas necessidades:
#!/bin/bash
VAR1=VAL1 ... VALN=VARN "$@"
Quanto à questão bônus: Eu não acho que o bash possa fazer isso, mas o zsh é incrível e pode fazer isso. Ambos
^FOO^BAR
e
!!:s/FOO/BAR/
tem o mesmo efeito e, para o seu exemplo específico:
!24:s/FOO/BAR/