Определите переменную Powershell, чтобы иметь значение списка - PullRequest
0 голосов
/ 21 мая 2018

У меня есть некоторые переменные, как показано ниже:

$a = "string1"
$b = "string2"
$c = "string3"

Теперь я хочу определить переменную $ list для всего содержимого из $ a, $ b, $ c, чтобы оно выглядело так:

$list = "
a: string1
b: string2
c: string3
"

как я могу это сделать?

*** Редактировать: содержимое списка должно быть ТОЧНО, как я написал, это означает, что такая часть, как "a:" b: ",... должно быть тоже самое

Ответы [ 6 ]

0 голосов
/ 21 мая 2018

Я думаю, что вам нужна хеш-таблица:

$list = @{}
$list.a = 'string1'
$list.b = 'string2'
$list.c = 'string3'

foreach( $item in $list ) {
  # do something
}

# get content of hash:

$var = $list['a']

# or

$var = $list.a
0 голосов
/ 21 мая 2018

Я подозреваю, что другие ответы уже дали вам то, что вы ищете.Тем не менее, вот другие решения для различных интерпретаций вашего вопроса ...


Если вы хотите, чтобы список заполнялся значениями, которые находятся в 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
0 голосов
/ 21 мая 2018

Похоже, вам нужен не фактический список, а строка со списком переменных.Многострочная строка с именами и значениями ваших переменных может быть определена следующим образом:

$list = @"
a: ${a}
b: ${b}
c: ${c}
"@

Другой, более динамичный параметр будет выглядеть примерно так:

$list = 'a', 'b', 'c' | ForEach-Object {
    "${_}: $(Get-Variable $_ -ValueOnly)"
} | Out-String

, где вы указываетесписок с именами переменных, выходные строки, содержащие каждое имя переменной и соответствующее значение, и объединить их в одну строку в конце.

0 голосов
/ 21 мая 2018

Powershell имеет ' массивы ':

"Массив - это структура данных, предназначенная для хранения коллекции элементов. Элементы могут быть одинакового типа или разнымитипов. "

В вашем случае, если у вас уже есть переменные, вы можете включить их в массив:

$myarray = $a, $b, $c
Write-Host $myarray

или

$myarray = @($a, $b, $c)
Write-Host $myarray

илиВы можете создать ассоциативный массив для ввода ваших элементов значения ключа:

$otherarray = @{}            # create en empty array
$otherarray['a'] = 'string1' # add key-value pairs
$otherarray['b'] = 'string2'
$otherarray['c'] = 'string3'
Write-Host $otherarray.c     #print in console example

Редактировать: на вашем примере я рекомендовал массивы, потому что я думаю, что это простой случай использования, но если вы будетеизмените его часто, лучше используйте System.Collection.ArrayList :

$mylist = New-Object System.Collections.ArrayList
$mylist.add($a)
$mylist.add($b)
$mylist.add($c)
$Write-Host $mylist
0 голосов
/ 21 мая 2018
[string[]]$list = "string1","string2","string3"

Редактировать:

Я не прочитал ваш вопрос полностью, вот пример хеш-таблицы с парами ключ = значение:

$a = "string1"
$b = "string2"
$c = "string3"

$list = @{
a = $a
b = $b
c = $c
}

В конечном итоге это зависит от того,знать, как использовать конструкцию, и для чего вы ее используете.Есть много способов получить простой список / массив / таблицу из 3 строк.

0 голосов
/ 21 мая 2018


Вы можете использовать New-Object System.Collections.ArrayList , чтобы создать список и использовать его.Например:

$a = "string1"
$b = "string2"
$c = "string3"

$list = New-Object System.Collections.ArrayList
$list.Add($a)
$list.Add($b)
$list.Add($c)

Теперь $ list [1] дает строку 2.

Надеюсь, это поможет.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...