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

Shell脚本如何判断eval执行API请求的结果是否为[]并终止执行?

实现方案建议

先纠正你现有代码里的几个关键问题,再给出可行的实现方式:

现有代码的核心问题

  • 变量赋值不能加空格:cmd = 'xxx' 要改成 cmd='xxx',Shell里变量赋值前后不能有空格
  • if语句语法完全错误,Shell的条件判断需要用[ ]或[[ ]]包裹,且then要放在条件后(可换行但语法需合规)
  • 不能直接把eval的执行结果丢进条件判断,得先把API响应存到变量里
  • break是用来跳出循环的,要终止整个脚本得用exit

可行的实现方式

方式1:直接捕获curl输出(推荐,避免eval)

如果你的curl命令可以直接写,尽量别用eval,安全性更高:

# 执行curl命令,把响应存到response变量里
response=$(curl "你的API地址" [其他curl参数,比如-H、-d等])

# 检查响应是否为[]
if [[ "$response" == "[]" ]]; then
    echo "Empty response from API"
    exit 1  # 终止脚本,返回非0状态码表示执行失败
fi

# 响应正常时继续执行后续逻辑
echo "API响应有效,继续执行..."

方式2:必须用eval的场景(不推荐,除非迫不得已)

如果确实需要通过eval执行拼接好的命令,先把执行结果存到变量再判断:

# 注意变量赋值不要有空格
cmd='curl "你的API地址" [其他curl参数]'

# 执行命令并捕获响应
response=$(eval "$cmd")

# 判断响应内容
if [ "$response" = "[]" ]; then
    echo "Empty response from API"
    exit 1
fi

# 后续代码逻辑
echo "继续处理有效响应..."

额外注意点

  • 优先用[[ ]]替代[ ]做条件判断,[[ ]]支持更直观的字符串比较,且不需要对空格、特殊字符做额外转义
  • 如果API响应可能带多余的换行或空格,可以先清理再判断,比如:
response=$(eval "$cmd" | tr -d '\n ')  # 去掉所有换行和空格
  • 尽量别用eval,如果是因为要动态拼接curl参数,可以用数组来构建命令,更安全:
# 用数组存curl参数,避免拼接字符串的风险
curl_args=("你的API地址" "-H" "Content-Type: application/json" "-d" '{"key":"value"}')
response=$(curl "${curl_args[@]}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:45:26