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

Syspass API Bash脚本curl请求JSON参数变量无法识别问题

问题原因

Bash 中单引号包裹的字符串会完全保留字面量,不会执行任何变量展开、命令替换操作,你将完整JSON结构放在单引号中,内部的$开头变量自然会被当做普通字符串传递,不会解析为实际值。如果直接把外层单引号换成双引号,又会和JSON语法要求的内部双引号冲突,导致语法错误。

解决方案

方案1(推荐):使用jq工具生成JSON

jq是专门处理JSON的命令行工具,会自动完成变量注入、特殊字符转义,完全避免手动拼接JSON的格式错误:

  1. 先安装jq:各主流发行版软件源均包含,例如Debian/Ubuntu执行apt install jq,CentOS/RHEL执行yum install jq。
  2. 修改后的脚本如下:
#!/bin/bash

token="x"
tokenPass="x"
name="prueba"
url="https://prueba.prueba.prueba"
user="prueba"
pass="prueba"
notes="prueba"

# 生成标准JSON结构
json_data=$(jq -n \
  --arg token "$token" \
  --arg tokenPass "$tokenPass" \
  --arg name "$name" \
  --arg user "$user" \
  --arg url "$url" \
  --arg pass "$pass" \
  --arg notes "$notes" \
  '{
    "jsonrpc": "2.0",
    "method": "account/create",
    "params": {
      "authToken": $token,
      "tokenPass": $tokenPass,
      "name": $name,
      "categoryId": "7",
      "clientId": "9",
      "login": $user,
      "url": $url,
      "pass": $pass,
      "notes": $notes
    },
    "id": 1
  }')

# 调用接口
curl -k -H "Content-Type:Application/json" -d "$json_data" -o- https://syspass.prueba.es/api.php

方案2:手动拼接JSON字符串

如果不想安装额外工具,可以通过拆分单双引号的方式拼接,仅在变量部分使用双引号实现展开:

#!/bin/bash

token="x"
tokenPass="x"
name="prueba"
url="https://prueba.prueba.prueba"
user="prueba"
pass="prueba"
notes="prueba"

curl -k -H "Content-Type:Application/json" -d '{"jsonrpc": "2.0", "method": "account/create", "params": { "authToken": "'"$token"'", "tokenPass": "'"$tokenPass"'", "name": "'"$name"'" , "categoryId": "7", "clientId": "9","login":"'"$user"'","url": "'"$url"'" ,"pass": "'"$pass"'","notes": "'"$notes"'"}, "id": 1}' -o- https://syspass.prueba.es/api.php

注意:该方案不会自动处理变量中的特殊字符,如果变量值包含双引号、换行、反斜杠等字符,会直接破坏JSON结构导致请求失败,仅适合变量值为纯普通字符的场景使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:36:04