The ones in Python work significantly differently though; they have inline code execution (rather than using a varargs list after the f-string itself).
As I recall (and Wikipedia seems to confirm), parameter substitutions were in the original bourne shell in 1979, so... Yeah, I'm not sure what's going on there.