假设我有一个PowerShell函数,该函数返回[string[]]
:
function do_something() {
[string[]]$str_array = @("one", "two", "three")
return $str_array
}
$x = do_something()
# doesn't work
$y = @("something", $x)
现在,我想在[string[]]
列表的前面添加一个字符串。
我该怎么做?
答案 0 :(得分:0)
有多个ways连接两个数组。关于上述评论中的问题:
这很有趣,我没有意识到“,”和“;”是不同的形成列表时...
在PowerShell中,,
是一个自己的运算符,在一元或二进制语句中使用时,其行为会有所不同。
作为二进制运算符,逗号创建一个数组。作为一元运算符,逗号创建一个包含一个成员的数组。将逗号放在成员之前。
在代码@("something", $x)
中,您以二进制形式使用运算符。因此,将创建一个具有两个条目的新数组。第一个条目是字符串“ something”,第二个条目包含字符串数组。那是因为PowerShell将其解释为:“好吧,我将创建一个具有两个条目的新数组(=“ something”,以及指向数组的引用)。
我们可以在帮助或Get-Member
的帮助下进行检查:
C:\> $y | Get-Member
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
...
TypeName: System.Object[]
Name MemberType Definition
---- ---------- ----------
Add Method int IList.Add(System.Object value)
...
可以看出,Get-Member
显示使用两个TypeName
。第一个是字符串,第二个是数组。
将代码更改为@("something"; $x)
时,不再使用,
运算符。取而代之的是,由于使用了命令分隔符(= {;
),因此代码现在分成了大约三个“命令”。
您还可以删除命令分隔符并在多行中定义$y
:
PS C:\>$y = @("something"
>>> $x
>>> )
不要太含糊,我建议按以下方式合并两个数组:
PS C:\> $a = 1
PS C:\> $b = @(2,3,4)
PS C:\> $c = @()
PS C:\> $c += $a
PS C:\> $c += $b
PS C:\> $c
1
2
3
4
PS C:\> $c | gm
TypeName: System.Int32
Name MemberType Definition
...
当然,它是“更多”的代码,但是其模棱两可。
希望有帮助。