将具有 space 的字符串值传递给另一个 powershell 文件
Pass string value having space to another powershell file
我有一个 powershell 脚本调用另一个传递字符串参数的 powershell 文件。
param (
[string]$strVal = "Hello World"
)
$params = @{
message = "$strVal"
}
$sb = [scriptblock]::create(".{$(get-content $ps1file -Raw)} $(&{$args} @params)")
脚本以某种方式传递不带双引号的消息变量,因此 powershell 文件仅接收消息变量的第一部分(在 space 之前),即 "Hello".
如何使用 space(即 "Hello World")传递 strVal 变量?
一对双引号指示 PowerShell 执行字符串扩展。如果你想让双引号按字面意思输出,你需要将它们转义(防止扩展)或者用单引号括起来。但是,单引号对表示 PowerShell 按字面意义处理所有内容,因此您的变量不会进行插值。鉴于这种情况,您需要字符串扩展、变量插值和文字双引号。
您可以执行以下操作:
# Double Double Quote Escape
@{message = """$strVal"""}
Name Value
---- -----
message "Hello World"
# Backtick Escape
@{message = "`"$strVal`""}
Name Value
---- -----
message "Hello World"
引用解析从左到右进行,这意味着最左边的引用类型优先。所以 '"$strVal"'
由于外部单引号对,只会按字面打印所有内容。 "'$strVal'"
将打印单引号和 $strVal
.
的值
我有一个 powershell 脚本调用另一个传递字符串参数的 powershell 文件。
param (
[string]$strVal = "Hello World"
)
$params = @{
message = "$strVal"
}
$sb = [scriptblock]::create(".{$(get-content $ps1file -Raw)} $(&{$args} @params)")
脚本以某种方式传递不带双引号的消息变量,因此 powershell 文件仅接收消息变量的第一部分(在 space 之前),即 "Hello".
如何使用 space(即 "Hello World")传递 strVal 变量?
一对双引号指示 PowerShell 执行字符串扩展。如果你想让双引号按字面意思输出,你需要将它们转义(防止扩展)或者用单引号括起来。但是,单引号对表示 PowerShell 按字面意义处理所有内容,因此您的变量不会进行插值。鉴于这种情况,您需要字符串扩展、变量插值和文字双引号。
您可以执行以下操作:
# Double Double Quote Escape
@{message = """$strVal"""}
Name Value
---- -----
message "Hello World"
# Backtick Escape
@{message = "`"$strVal`""}
Name Value
---- -----
message "Hello World"
引用解析从左到右进行,这意味着最左边的引用类型优先。所以 '"$strVal"'
由于外部单引号对,只会按字面打印所有内容。 "'$strVal'"
将打印单引号和 $strVal
.