如何在 curl 中 quote/use 变量

how to quote/use variables in curl

这可以正常工作

curl --header 'Accept: application/json' www.example.com

但是,如何实现这个(我想要header变量中的信息):

h="--header 'Accept: application/json'"                                                                                    
curl $h www.example.com                                                                                                         
curl: option --header 'Accept: application/json': is unknown
curl: try 'curl --help' or 'curl --manual' for more information

zsh 中,不带引号的参数扩展默认不进行 word-splitting。

h="--header 'Accept: application/json'"
curl $h www.example.com  # equiv to curl "--header 'Accept: application/json'"

您可以启用 word-splitting,但单引号仍然是 header.

部分
curl ${(z)h} www.example.com  # equiv. to curl "--header" "'Accept: application/json'" www.example.com

你想要的是一个数组,其中单引号只是用来转义 space.

解决方案是使用数组。

h=(--header 'Accept: application/json')
curl $h www.example.com  # equiv. to curl "--header" "Accept: application/json" www.example.com

array 参数扩展为一系列单独的单词,每个元素一个。