Em zsh, use o sinalizador de expansão de parâmetro %
.
tmp='%n@%m'; echo ${(%)tmp}
No bash, não parece ser um caminho fácil, mas há uma maneira sorrateira:
tmp=$(set +x; (PS4='+.\u@\h'; set -x; :) 2>&1); tmp=${tmp#*.}; echo ${tmp%:}
No tcsh, não acho que haja um jeito. (Mas quem usa (t) csh nos dias de hoje de qualquer maneira?)