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

Shell脚本执行curl拉取Bitwarden成员列表时header部分报错求解

问题根因

你将包含空格、嵌套引号的请求头参数存入了普通字符串变量,Bash执行命令时会按空格对变量内容做分词处理,字符串里的双引号会被识别为普通文本而非参数边界符。原本完整的-H "accept: text/plain"会被拆分为-H、"accept:、text/plain"三个独立参数,curl会把text、Bearer、XXXX这类拆分出来的内容误识别为请求地址,所以报无法解析主机的错误。

正确写法

推荐使用数组存储多参数,数组可以严格保留每个参数的边界,不会被错误拆分:

#!/bin/bash

CURL="/usr/bin/curl"
BITHTTP="https://api.bitwarden.com/public/members"

# 所有curl参数存入数组,每个元素对应一个独立参数
CURL_FULL_ARGS=(
  -X GET
  "$BITHTTP"
  -H "accept: text/plain"
  -H "Authorization: Bearer XXXX"
)

# 执行时用 "${数组名[@]}" 格式展开,保证参数边界正确
"$CURL" "${CURL_FULL_ARGS[@]}" > /tmp/bitmembers

如果不需要复用header参数,也可以直接在执行curl时指定参数,不要将带空格的header存入普通字符串变量:

#!/bin/bash
CURL="/usr/bin/curl"
BITHTTP="https://api.bitwarden.com/public/members"

"$CURL" -X GET "$BITHTTP" -H "accept: text/plain" -H "Authorization: Bearer XXXX" > /tmp/bitmembers

注意事项

  • 不要用普通字符串存储包含空格、特殊符号的命令参数,Bash的分词机制会破坏参数结构
  • 多参数存储优先用Bash数组,展开时必须加双引号包裹"${数组名[@]}",才能保留参数边界
  • URL、文件路径这类可能带特殊字符的变量,执行时建议用双引号包裹,避免被特殊字符拆分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:06:03