You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在curl请求头中通过Bash变量动态设置User-Agent?

解决Bash中用变量动态设置curl User-Agent的引号坑

我之前也踩过这个一模一样的坑!用Bash变量给curl动态设置带空格的User-Agent时,引号的使用确实让人头疼,咱们来拆解问题并找到最优解:

问题根源

  • 如果用单引号包裹User-Agent变量,比如 curl -H 'User-Agent: $MY_UA' https://example.com,Bash会把$MY_UA当成纯字符串,不会解析变量值;
  • 如果改用双引号,比如 curl -H "User-Agent: $MY_UA" https://example.com,当MY_UA里包含空格时,Bash会把空格当成参数分隔符,导致curl把User-Agent拆成多个无效参数,直接报错。

推荐解决方案:用数组存储请求头(及其他参数)

最优的做法是在curl命令外部,把所有请求头、请求数据、Cookie这类可能带特殊字符的参数都提前定义好,尤其推荐用数组来存储请求头,这样能完美处理空格、特殊符号的问题。

举个完整的例子:

  1. 先定义你的User-Agent变量(带空格也完全没问题):
MY_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
  1. 把请求头放到数组中(可以同时添加其他请求头):
REQUEST_HEADERS=(
  -H "User-Agent: $MY_UA"
  -H "Accept-Language: zh-CN,zh;q=0.9"
)
  1. 执行curl命令时直接引用数组:
curl "${REQUEST_HEADERS[@]}" https://example.com

为什么数组好用?

Bash数组会把每个-H开头的请求头当成一个独立的元素,不管里面包含多少空格或特殊字符,都会完整地传递给curl,不会被拆分。这种方法不仅解决了User-Agent的问题,对所有带特殊格式的请求参数都适用,还能让代码更清晰易维护。

如果需要动态添加其他参数(比如Cookie、POST数据),也可以用同样的思路,把它们提前定义成变量或数组,再传入curl命令。

内容的提问来源于stack exchange,提问作者Jimson James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:21:48