Search code examples
c#powershellstring-interpolation

Does Powershell string interpolation support format specifiers


Typical string formatting in powershell for instance to use padding or specifying number can be written like this:

>>> "x={0,5} and y={1:F3}" -f $x, $y
x=   10 and y=0.333

But in Powershell you can also use string interpolation like

>>> $x=10
>>> $y=1/3
>>> "x=$x and y=$y"
x=10 and y=0.333333333333333

And in C# string interpolation also supports the formatting specifiers:

> var x = 10;
> var y = 1.0/3.0;
> $"x={x,5} and y = {y:F2}";
"x=   10 and y = 0.33"

Is there a way to have that in Powershell? I've tried many combinations like

>>> "var=$($var, 10)"
var=10 10

but none of them work. Is this supported? Or is there a succinct way to call into C# to use it?

update as Mathias answers and as confirmed on Powershell's github this is currently not supported, so I made a feature request here


Solution

  • Is this supported?

    No, formatting is not supported during string expansion


    As you might have noticed, string expansion in PowerShell works by naively resolving subexpressions nested in double-quoted strings - there are no {} placeholder constructs.

    If you want string formatting, -f is the way to go.

    FWIW, $s -f $a is directly translated to a String.Format($s, $a) call

    For value types that support string formatting you can usually also call ToString() with a format string (just like in C#):

    PS C:\> $a = 1 / 3 
    PS C:\> $a.ToString("F2")
    0.33