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

使用curl提交JSON数据时遭遇未知选项错误的技术求助

问题分析

你的脚本报错的核心原因是**send_command函数里的"$@"会把传入的参数拆分成独立的bash参数,导致curl错误地将--files1这类参数识别为自身的命令行选项,而非POST数据的一部分**。

当调用command_1时,send_command接收到的参数是test_command、-I、{{files1}}、--files1、my_file.txt。在curl命令中使用"$@"会让bash把这些参数分别作为独立项传递给curl,最终curl会把--files1当成自己的命令行选项,而非--data-raw中的JSON内容。

修复方案

修改send_command函数,将所有传入的参数合并成单个字符串后再放入JSON中,避免参数被bash拆分。可以用"$*"替代"$@"($*会将所有参数用系统默认分隔符连接成一个字符串):

send_command () {
        # 将所有参数合并为单个字符串
        local cmd_str="$*"
        echo "{\"cmd\":\"$cmd_str\"}" 
        curl --request POST \
                 --data-raw "{\"cmd\":\"$cmd_str\"}" \
                 -H "Content-Type: application/json" \
                 "http://localhost:8080/addCmd/" 
}

command_1 () {
        send_command test_command \
        -I {{files1}} \
        --files1 'my_file.txt'
}
额外优化建议
  • 原脚本中-H "Content-Type: application/json"行末尾的反斜杠前没有空格,虽然bash解析时可能不会出问题,但为了可读性和避免潜在错误,建议在反斜杠前保留空格。
  • 如果你的参数中包含特殊字符(比如引号),直接拼接字符串可能会导致JSON格式错误,这时可以用jq工具安全生成JSON,避免手动转义的麻烦:
    send_command () {
            local cmd_str="$*"
            # 用jq生成合法的JSON
            local json_data=$(jq -n --arg cmd "$cmd_str" '{"cmd": $cmd}')
            echo "$json_data"
            curl --request POST \
                     --data-raw "$json_data" \
                     -H "Content-Type: application/json" \
                     "http://localhost:8080/addCmd/" 
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:06:10