Поддерживает ли Powershell строковую интерполяцию спецификаторы формата - PullRequest
0 голосов
/ 04 апреля 2020

Типичное форматирование строк в PowerShell, например, для использования заполнения или указания числа, можно записать так:

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

Но в Powershell вы также можете использовать интерполяцию строк, например

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

И в C# строковая интерполяция также поддерживает спецификаторы форматирования:

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

Есть ли способ сделать это в Powershell? Я пробовал много комбинаций, таких как

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

, но ни одна из них не работает. Это поддерживается? Или есть краткий способ вызвать C#, чтобы использовать его?

обновление , как отвечает Матиас, и как подтверждено на github Powershell, это в настоящее время не поддерживается, поэтому я сделал запрос функции здесь

1 Ответ

1 голос
/ 04 апреля 2020

Поддерживается ли это?

Нет, форматирование не поддерживается при расширении строки


Как вы могли заметить, расширение строки в PowerShell работает наивно разрешение подвыражений, вложенных в строки в двойных кавычках - нет {} конструкций-заполнителей.

Если вы хотите, чтобы строка форматировала , -f - это путь к go.

FWIW, $s -f $a напрямую переводится на String.Format($s, $a) вызов

Для типов значений, которые поддерживают форматирование строк, вы также можете обычно вызывать ToString() со строкой форматирования (как в C#):

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