簡體   English   中英

Powershell 正在從程序參數中刪除逗號

[英]Powershell is removing comma from program argument

我想將逗號分隔的值列表作為單個開關的一部分傳遞到腳本中。

這是程序。

param(
  [string]$foo
)

Write-Host "[$foo]"

這是使用示例

PS> .\inputTest.ps1 -foo one,two,three

我希望這個程序的 output 是[one,two,three]但它返回的是 [one,two, [one two three] 這是一個問題,因為我想使用逗號來分隔值。

為什么 powershell 刪除逗號,我需要更改什么才能保留它們?

逗號是powershell中的一個特殊符號,表示數組分隔符。

只需將參數放在引號中:

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

或者,您可以“引用”逗號:

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

以下選擇可用

  1. 圍繞所有論點的引用(')

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

  2. 每個逗號之前的Powershell的轉義字符(重音符號(`))

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

參數的雙引號不會改變任何東西!
單引號消除了擴展。
逃脫角色 (重音符號)消除了下一個角色的擴展

將它括在引號中,以便將其解釋為一個變量,而不是以逗號分隔的三個列表:

PS>。\\ inputTest.ps1 -foo“一,二,三”

如果您從批處理文件傳遞參數,則將您的參數括起來,如下所示“”“Param1,Param2,Param3,Param4”“”

Powershell 刪除逗號並使用它們來分隔數組。 您可以將數組元素重新連接成一個字符串,並在每個元素之間放置一個逗號。

param(
  [string[]]$foo
)
$foo_joined = $foo -join ","
write-host "[$foo_joined]" 

arguments 之間的任何空格都將被刪除,因此:

PS>.\inputTest.ps1 -foo one, two, three

還將 output: [one,two,three]

如果您需要空格,則需要引號,請執行以下操作:

PS>.\inputTest.ps1 -foo one,"two is a pair"," three"

如果要 output: [one,two is a pair, three]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM