我有一个名为script.ps1的powershell脚本
它接受一个名为-myString
和-myOut
的参数。
如何将$Test
之类的字符串正确地传递到-myString
中?
我尝试过
script.ps1 -myString '$test1' -myOut 3
script.ps1 -myString "$test1" -myOut 3
但都只是假设$ test是另一个参数名称,而我错过了-myOut
编辑:反引号没有出现在SO中,但我将它们包括在内。
Edit2:
param (
[string]$myString= “”,
[string]$myOut= “”
)
Write-Host "Hello $myString $myOut"
执行示例:
Script.ps1 -myString ‘$test’ -myOut 3
无法回忆确切的输出,但它类似于: 你好3
答案 0 :(得分:3)
如果您在$
前面加了一个反引号,则可以使用双引号。
但是通常的方法是使用单引号:-myString "`$test1"
。
请注意,单引号版本应在字符串值的两边带有两个相同的直撇号(-myString '$test1'
),而不是反引号('
)。
对于双引号或单引号版本,您可以使用卷曲的Unicode引号字符(与SmartQuotes在Word中提供的字符相同),但是这些字符仅在您的会话中有效使用Powershell识别为Unicode的语言环境设置运行。如果存在区域设置不匹配,Windows将无法正确解释此类引号(或任何其他非ASCII字符)。
因此,假设您使用的标点符号与会话的文本编码匹配,那么这些方法应该对您有效,就像在这里为我所做的一样:
`
请注意,无论您使用哪种双引号,用于转义美元符号的反引号始终必须是ASCII反引号PS /> type foo.ps1 # the test script
param($myString, $myOut)
Write-Host "myString=$myString, myOut=$myOut"
PS /> ./foo.ps1 -myString "`$test1" -myOut 3 # ASCII double-quotes
myString=$test1, myOut=3
PS /> ./foo.ps1 -myString “`$test1” -myOut 3 # Unicode double-quotes
myString=$test1, myOut=3
PS /> ./foo.ps1 -myString '$test1' -myOut 3 # ASCII single-quotes
myString=$test1, myOut=3
PS /> ./foo.ps1 -myString ‘$test1’ -myOut 3 # Unicode single-quotes
myString=$test1, myOut=3
; Powershell无法识别与该字符等效的卷曲Unicode。