Zsh中如何将=()进程替换传递给curl命令?
解决zsh中curl使用=(...)进程替换的问题
在zsh里直接写@=(...)会触发解析歧义——因为@=是zsh参数扩展的特殊语法(比如用于拆分字符串为数组的${(@)=var}),shell会错误解析你的命令。要正确使用=(...)进程替换,需要用引号把进程替换部分包裹起来,或者用括号明确分隔,让zsh优先处理进程替换:
正确写法示例
方法1:用双引号包裹进程替换
curl -XPOST example.com/{foo,bar} -F file="@=(<<<data)"
方法2:用括号明确分隔(适合更复杂的命令)
curl -XPOST example.com/{foo,bar} -F file=@"(<<<data)"
用print命令的正确写法
如果用print输出内容,同样需要包裹:
curl -XPOST example.com/{foo,bar} -F file="@=(print data)"
原理说明
=(...)会生成一个包含命令输出的临时文件,返回这个临时文件的路径。用引号包裹后,zsh会先完成进程替换得到临时文件路径,再把@/path/to/tmpfile传给curl,避免了@=被误解析为参数扩展语法。
内容的提问来源于stack exchange,提问作者darw
相关产品推荐
相关产品推荐

