将Powershell变量定义为具有列表

时间:2018-05-21 07:00:34

标签: powershell

我有一些变量如下:

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

现在我想定义一个变量$ list,其中包含来自$ a,$ b,$ c的所有内容,如下所示:

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

我该怎么做?

***编辑:列表的内容必须像我写的那样完全,这意味着,像#" a:" b:",......也必须一样

6 个答案:

答案 0 :(得分:5)

看起来你不想要一个实际的列表,而是一个带有变量列表的字符串。带有变量名称和值的多行字符串可以这样定义:

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

另一个更有活力的选择是这样的:

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

您可以在其中指定包含变量名称的列表,输出包含每个变量名称和相应值的字符串,并在最后将这些字符串合并为单个字符串。

答案 1 :(得分:2)

Powershell有'arrays':

  

“数组是一种用于存储集合的数据结构   的项目。这些项目可以是相同类型或不同类型。“

在您的情况下,如果您已经有变量,则可以将它们包含在数组中:

$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

答案 2 :(得分:1)

[string[]]$list = "string1","string2","string3"

编辑:

我没有完全阅读你的问题,这里是一个带键=值对的哈希表的例子:

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

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

最终,这取决于您是否知道如何使用该构造,以及您使用它的原因。有很多方法可以实现3个字符串的简单列表/数组/表。

答案 3 :(得分:0)


您可以使用 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]给出了string2。

希望这会有所帮助。 :)

答案 4 :(得分:0)

我怀疑其他答案已经给了你你已经拥有的东西。但是,以下是针对您的问题的不同解释的其他解决方案......

如果您希望在运行时使用UITextFieldresignFirstRespondera中的值填充列表,则可以执行以下操作:

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

或者,如果您希望使用单个“here-string”(即可以是多行的字符串)填充列表,将其拆分为每行一个项目,则可以执行以下操作:

list

这将获取多行字符串并将其拆分为换行符(使用正则表达式确保它以相同的方式处理不同的潜在行结尾,并跳过多个连续换行符以避免在项目之间创建空白条目)。

最后,如果您想从列表中填充变量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

答案 5 :(得分:0)

我认为哈希表就是你要找的东西:

$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