json - 管道后的 '@-'在PowerShell中是什么意思?

标签 json powershell curl

this StackOverflow thread中,建议的答案是为命令选项提供魔术“stdin”字符串'@-'

# Create data as PS hashtable literal.
$data = @{ user = @{ name = "$Firstname $Lastname"; email = "$adUsername@mydomain.org" } }

# Convert to JSON with ConvertTo-Json and pipe to `curl` via *stdin* (-d '@-')
$data | ConvertTo-Json -Compress | curl.exe mydomain.zendesk.com/api/v2/users.json -d '@-' -H "Content-Type: application/json" -X POST -v -u myuser:mypass

它的工作原理就像一种魅力,但是魔术的“stdin”字符串实际上是什么意思呢?

谢谢!

最佳答案

curl-d参数允许您通过文件(其内容)而非直接值来提供数据。

为了将直接值(默认值)与代表文件名的值区分开,文件名必须以@(在Unix世界中很常见)为前缀。

在Unix世界中,-是一种常用的约定,用于在需要文件名的上下文中表示stdin(标准输入)(取决于上下文,它也可能表示stdout(标准输出)。

因此,@-有效地指示curl从stdin读取-d参数,该参数在PowerShell中(始终)是通过管道(|)提供的。

在PowerShell命令中,必须加引号@-('@-'),因为参数开头的未加引号的@是元字符,即具有特殊句法含义的字符(它具有多个功能,包括splatting)。
或者,您可以仅对@本身进行转义:`@-(PowerShell的转义字符为`,即所谓的反引号)。

关于json - 管道后的 '@-'在PowerShell中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62455946/

相关文章:

shell - torch 安装没有 curl

php - 如何使用 PHP curl 命令行发送 header ?

php - 如何将 JSON 字符串转换为数组

windows - 如何使用 New-Service 命令将 PowerShell 脚本制作为 Windows 服务?

javascript - JQuery 未读取 JSON 数组值

shell - Jenkins Pipeline Access 阶段步骤变量在 powershell 执行中

windows - 获取与添加/删除程序列表匹配的已安装应用程序列表

curl - 如何在Logstash中将事件标记为 “Looked At”

python - 拦截从 iOS 应用程序发送到服务(从 Python 和 Appium)的请求

java - 如何从 Java 中的 JSON 文件中删除键值对