Powershell正在从程序参数中删除逗号

Sta*_*hod 18 powershell

我想将逗号分隔的值列表传递到脚本中作为单个开关的一部分.

这是程序.

param(
  [string]$foo
)

Write-Host "[$foo]"
Run Code Online (Sandbox Code Playgroud)

这是用法示例

PS> .\inputTest.ps1 -foo one,two,three
Run Code Online (Sandbox Code Playgroud)

我希望这个程序的输出是,[one,two,three]但它返回[one two three].这是一个问题,因为我想使用逗号来区分值.

为什么powershell删除了逗号,为了保留它们我需要更改什么?

Joh*_*don 32

逗号是powershell中的一个特殊符号,表示数组分隔符.

只需将参数放在引号中:

inputTest.ps1 -foo "one, two, three"
Run Code Online (Sandbox Code Playgroud)

或者,您可以"引用"逗号:

inputTest.ps1 -foo one`,two`,three
Run Code Online (Sandbox Code Playgroud)


mar*_*owa 10

以下选择可用

  1. 围绕所有论点的引用(')

    inputTest.ps1 -foo 'one,two,three'

  2. 每个逗号之前的Powershell的转义字符(重音符号(`))

    inputTest.ps1 -foo one`,two`,three

参数的双引号不会改变任何东西!
单引号消除了扩展.
逃脱角色(重音符号)消除了下一个角色的扩展

  • 双引号似乎有一种奇怪的行为。如果我直接在 Powershell 中使用它们,它们可以工作,但如果我使用另一个程序的参数启动 Powershell,它们就不起作用。 (2认同)