在cmd中
tshark -r a.pcapng -Y "http.request.uri == \"/test.php\" || http.response"
在 Powershell 中使用 Escape
/
时出现错误。我尝试了\ `
,但我无法让命令工作。
tshark -r 0.pcapng -Y "http.request.uri == `"\/test.php`" || http.response"
tshark: "`" was unexpected in this context.
http.request.uri == `\/test.php` || http.response
^
相当于以下
cmd.exe
命令行:
:: cmd.exe (batch file)
tshark -r a.pcapng -Y "http.request.uri == \"/test.php\" || http.response"
is(类似地适用于对外部程序的所有调用):
在 PowerShell(核心)7 v7.3+:
# PowerShell 7.3+
tshark -r a.pcapng -Y "http.request.uri == `"/test.php`" || http.response"
也就是说,为了将
"
字符嵌入到 "..."
(可扩展)字符串中,您必须将它们转义为 `"
,即使用所谓的 backtick,PowerShell 的 转义字符。
在幕后,当调用外部程序(例如
tshark
)时,PowerShell (.NET) 默认情况下会确保嵌入的 "
在构建进程命令行时转义为 \"
,因为这就是形式Windows 上的 CLI 最广泛使用的转义。
$PSNativeCommandArgumentPassing
首选项变量控制,其在 Windows 上的默认值 'Windows'
会出于向后兼容性的目的进行选择性例外;您可以禁用这些异常 ('Standard'
),或者您可以选择使用旧的、损坏的行为 ('Legacy'
) - 请参阅下一点。在 Windows PowerShell(旧版、Windows 附带、仅限 Windows 的 PowerShell 版本,最新且最后一个版本为 5.1)和 PowerShell (Core) 7 直至 v7 .2.x,不幸的是,外部程序的\
转义必须手动执行,可能除了PowerShell自己的转义之外,由于长期存在的错误:
# Windows PowerShell and PowerShell 7.2-
tshark -r a.pcapng -Y "http.request.uri == \`"/test.php\`" || http.response"
# With a verbatim string.
tshark -r a.pcapng -Y 'http.request.uri == \"/test.php\" || http.response'
此答案了解更多信息。