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

Bash脚本构造HTTP请求URL异常:大括号错位问题求助

Bash脚本构造URL时出现字符异常的原因及解决方法

问题原因

你遇到的开头h被}替换的异常,主要是因为在双引号字符串中直接转义双引号构造JSON时,Bash的字符串解析规则导致格式混乱;另外也有可能是脚本中混入了Windows风格的换行符(\r),输出时光标回退覆盖了字符。

解决方法

以下是几种可靠的修复方式:

方法1:单引号+变量拼接构造URL

用单引号包裹固定的JSON部分,避免双引号转义,再单独拼接变量:

current_time=$(date +%s)
url='http://192.168.1.1/cgi-bin/Operation.cgi?data={"action":"synctime","newtime":'"$current_time"'"}'
response=$(curl -s "$url")

单引号会屏蔽Bash对双引号、大括号的特殊解析,变量$current_time用双引号包裹可保证数值正确展开。

方法2:使用printf格式化构造URL

printf的格式化功能能更安全地拼接变量与固定字符串,完全规避转义问题:

current_time=$(date +%s)
printf -v url 'http://192.168.1.1/cgi-bin/Operation.cgi?data={"action":"synctime","newtime":%d}' "$current_time"
response=$(curl -s "$url")

-v参数直接将格式化结果赋值给url变量,%d作为整数占位符匹配时间戳的数值类型。

方法3:检查并修复换行符问题

如果脚本是在Windows环境编辑后传到Linux的,可能存在\r换行符导致异常。用以下命令检查:

cat -A your_script.sh

若看到行尾有^M,则用dos2unix转换为Unix风格换行符:

dos2unix your_script.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:42:24