$ printf '[%s]' file{,{.bak\;mv,.new},}
[file][file.bak;mv][file.new][file]
(Note: I took out the '\ ' from the original because I realized it is not necessary).The eval is there because in bash text expansion occurs after ';' is interpreted, and we need that to be the other way around. Hence, the escaping of ';' in the input to preserve it for text expansion, and then the eval afterward to get ';' interpreted.