Good point, and I think a syntax played a great role here. Before C#-style formatting syntax, many if not most formatting syntaxes were signaled by a single character (`%` in C printf, `$` in sh, `~` in Common Lisp and so on), probably because it was easy to implement with a simple scanner. Those were obviously difficult to extend, because the last character is implicit and not only embedded expressions but pretty much every additional syntax had to be sandwiched between the signaling character and other existing syntaxes [1]. Grouping characters are much more flexible in comparison and it should have been a natural extension to allow any expression inside.
[1] Some did recognize this difficulty and introduced an additional pair of grouping characters (e.g. `%|asdf|` or `${asdf}`). These were however rare, and those that ultimately allowed an arbitrary expression were even rarer.
[1] Some did recognize this difficulty and introduced an additional pair of grouping characters (e.g. `%|asdf|` or `${asdf}`). These were however rare, and those that ultimately allowed an arbitrary expression were even rarer.