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

如何在ANSI引号字符串中回显变量?附curl命令场景示例

在Bash的ANSI引号字符串中解析变量的解决方案

你遇到的问题很典型:Bash里的$'...'(ANSI-C引号字符串)只会处理转义字符(比如\r\n这种换行符),但单引号类的字符串里变量替换是被禁用的,所以${shopid}和${itemid}会被当作纯文本输出,不会替换成你定义的变量值。

这里有两种简单可靠的解决办法:

方法1:拼接字符串(最直接)

把需要解析变量的部分从ANSI引号里拆出来,用双引号包裹(双引号支持变量替换),再和ANSI引号的部分拼接在一起:

#!/bin/bash
shopid=9932781
itemid=231873991
curl -sSb /tmp/cookies 'https://website.com' \
-H 'cookie: csrftoken=mytoken' \
-H 'x-csrftoken: mytoken' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary' \
-H 'referer: https://website.com' \
--data-binary $'------WebKitFormBoundary\r\nContent-Disposition: form-data; name="shopid"\r\n\r\n'"${shopid}"$'\r\n------WebKitFormBoundary\r\nContent-Disposition: form-data; name="itemid"\r\n\r\n'"${itemid}"$'\r\n------WebKitFormBoundary--'

原理是:

  • $'...'负责处理\r\n这类转义序列,生成正确的换行格式
  • "${shopid}"和"${itemid}"负责解析变量,替换成实际的值
  • Bash会自动把相邻的字符串(不管是单引号、双引号还是ANSI引号的)拼接成一个完整的字符串

方法2:用printf构建数据(更清晰)

如果你的表单内容比较复杂,用printf来构建完整的请求数据会更易读,printf既支持转义字符,也支持变量替换:

#!/bin/bash
shopid=9932781
itemid=231873991

# 用printf生成带变量和正确换行的请求数据
request_data=$(printf '------WebKitFormBoundary\r\nContent-Disposition: form-data; name="shopid"\r\n\r\n%s\r\n------WebKitFormBoundary\r\nContent-Disposition: form-data; name="itemid"\r\n\r\n%s\r\n------WebKitFormBoundary--' "$shopid" "$itemid")

# 把生成好的数据传给curl
curl -sSb /tmp/cookies 'https://website.com' \
-H 'cookie: csrftoken=mytoken' \
-H 'x-csrftoken: mytoken' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary' \
-H 'referer: https://website.com' \
--data-binary "$request_data"

这种方式把数据构建和curl调用分开,逻辑更清晰,后续修改表单字段也更方便。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:49:50