PowerShell:如何在 PowerShell 中将数组对象转换为字符串?

Posted

技术标签:

【中文标题】PowerShell:如何在 PowerShell 中将数组对象转换为字符串?【英文标题】:PowerShell: How do I convert an array object to a string in PowerShell? 【发布时间】:2011-12-05 03:11:26 【问题描述】:

如何将数组对象转换为字符串?

我试过了:

$a = "This", "Is", "a", "cat"
[system.String]::Join(" ", $a)

没有运气。 PowerShell 中有哪些不同的可能性?

【问题讨论】:

查看我的答案,但您的代码也可以正常工作。为什么说“没有运气”? 对不起,是的,它似乎确实有效,我想我在测试时搞砸了。 【参考方案1】:
$a = 'This', 'Is', 'a', 'cat'

使用双引号(并且可以选择使用分隔符$ofs

# This Is a cat
"$a"

# This-Is-a-cat
$ofs = '-' # after this all casts work this way until $ofs changes!
"$a"

使用运算符连接

# This-Is-a-cat
$a -join '-'

# ThisIsacat
-join $a

使用转换为[string]

# This Is a cat
[string]$a

# This-Is-a-cat
$ofs = '-'
[string]$a

【讨论】:

对于未发起的(如我)$ofs 记录在案here *** 文档已关闭,因此 Liam 的链接已失效。这是对输出字段分隔符 $OFS 的另一种解释:blogs.msdn.microsoft.com/powershell/2006/07/15/… @JohanBoulé :因为使用输入字段分隔符的第一个字符作为输出字段分隔符是一种讨厌的 hack - 并且不允许使用多字符串分隔字段。 (例如,Awk 有 FS 和 OFS 变量)。 官方文档在这里:github.com/MicrosoftDocs/PowerShell-Docs/blob/staging/reference/… 似乎您在一定时间后无法编辑 cmets。这里有几个工作链接:docs.microsoft.com PowerShell 7.1GitHub PowerShell 7.1【参考方案2】:

我发现将数组通过管道传输到 Out-String cmdlet 也很有效。

例如:

PS C:\> $a  | out-string

This
Is
a
cat

哪种方法最适合使用取决于您的最终目标。

【讨论】:

仅供参考:只做$a$a | out-string 的效果相同 @JohnLBevan 并非总是如此。 ($a | out-string).getType() = 字符串。 $a.getType() = 对象[]。如果您使用 $a 作为期望字符串的方法的参数(例如 invoke-expression),那么 $a | out-string 具有明显的优势。【参考方案3】:
1> $a = "This", "Is", "a", "cat"

2> [system.String]::Join(" ", $a)

第二行执行操作并输出到主机,但不修改$a:

3> $a = [system.String]::Join(" ", $a)

4> $a

This Is a cat

5> $a.Count

1

【讨论】:

【参考方案4】:

从管道

# This Is a cat
'This', 'Is', 'a', 'cat' | & "$input"

# This-Is-a-cat
'This', 'Is', 'a', 'cat' | & $ofs='-';"$input"

写主机

# This Is a cat
Write-Host 'This', 'Is', 'a', 'cat'

# This-Is-a-cat
Write-Host -Separator '-' 'This', 'Is', 'a', 'cat'

Example

【讨论】:

这是一个了不起的技巧。这个例子不再起作用了,即使这个答案已经有 5 年了,我还是试着解释一下我今天学到的东西。 $ofsOutput Field Separator 变量,用于将数组转换为字符串以进行输出。在这里,它在脚本块中设置,返回输入的字符串值(来自管道的数组),由命令& 执行。我之前不知道$ofs,以及& 接受脚本块作为参数【参考方案5】:

你可以像这样指定类型:

[string[]] $a = "This", "Is", "a", "cat"

检查类型:

$a.GetType()

确认:

IsPublic IsSerial 名称 BaseType -------- -------- ---- -------- 真真字符串[] System.Array

输出$a:

PS C:\>$a 这 是 一种 猫

【讨论】:

【参考方案6】:
$a = "This", "Is", "a", "cat"

foreach ( $word in $a )  $sent = "$sent $word" 
$sent = $sent.Substring(1)

Write-Host $sent

【讨论】:

以上是关于PowerShell:如何在 PowerShell 中将数组对象转换为字符串?的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell:如何在 PowerShell 中将数组对象转换为字符串?

powershell 如何定时执行 ps1

如何在不卸载powershell的情况下,有效禁用/启用powershel

powershell 如何在PowerShell中编写“按任意键继续”

powershell 如何在PowerShell中编写“按任意键继续”

在python脚本中运行powershell脚本,如何让python在运行时打印powershell输出