Я подозреваю, что другие ответы уже дали вам то, что вы ищете.Тем не менее, вот другие решения для различных интерпретаций вашего вопроса ...
Если вы хотите, чтобы список заполнялся значениями, которые находятся в a
, b
и c
во время выполнения вы можете сделать это:
$a = "string1"
$b = "string2"
$c = "string3"
$list = @('a','b','c') | Get-Variable | ForEach-Object{'{0}: {1}' -f $_.Name, $_.Value}
$list
т.е. он найдет переменные a
, b
и c
и заполнит list
строками на основе имени и отформатированного значения переменнойas name: value
.
В качестве альтернативы, если вы хотите заполнить список одной строкой здесь (то есть строкой, которая может быть многострочной), разделенной на один элемент в строке,Вы можете сделать это:
$list = @'
a: string1
b: string2
c: string3
'@ -split '[\r\n]+'
$list.Count #prove that our list contains 3 items rather than 1 multi line item
$list # show the contents of the array
Это берет многострочную строку и разбивает ее на разрывы строк (используя регулярное выражение, чтобы гарантировать, что он обрабатывает различные потенциальные окончания строк одинаково, и пропускает несколько последовательных разрывов строкчтобы избежать создания пустых записей между элементами).
Наконец, если вы хотите заполнить переменные a
, b
и c
из списка, вы можете использовать что-то вроде этого:
$list = @(
'a: string1',
'b: string2',
'c: string3'
)
$list | ForEach-Object {
if ($_ -match '^\s*(?<VarName>[^\:]+)\s*:\s*(?<VarValue>.*)$') {
Write-Verbose ('Name: {0}; Value {1}' -f $Matches.VarName, $Matches.VarValue)
New-Variable -Name $Matches.VarName -Value $Matches.VarValue -Force
}
}
$a
$b
$c