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

如何从花括号作用域返回变量?以获取curl命令返回码为例

解决Bash中花括号管道作用域内变量无法外部访问的问题

你的脚本里拿不到rc变量的核心原因是:管道(|)会创建子shell进程,花括号里的代码是在子shell中执行的,子shell里的变量无法传递回父shell,所以外部的echo读不到rc的值。

下面给你几种可行的解决方法:

方法1:用进程替换替代管道(推荐)

进程替换(>(...))不会创建子shell,花括号内的代码在当前shell环境执行,变量可以直接保留:

#!/usr/bin/bash

{ # scope for tee
    curl --max-time 5 "https://google.com"
    rc=$?
} > >(tee "page.html")

echo "return code: $rc"

这里> >(tee "page.html")相当于把花括号的输出重定向到tee进程,整个过程没有创建子shell,rc变量会留在当前shell里。

方法2:用临时文件传递返回码

如果你的环境不支持进程替换(比如某些老旧Bash版本),可以把返回码写入临时文件,再从父shell读取:

#!/usr/bin/bash

# 创建临时文件
tmp_rc=$(mktemp)

{ # scope for tee
    curl --max-time 5 "https://google.com"
    # 把返回码写入临时文件
    echo $? > "$tmp_rc"
} | tee "page.html"

# 从临时文件读取返回码
rc=$(cat "$tmp_rc")
# 清理临时文件
rm "$tmp_rc"

echo "return code: $rc"

方法3:利用pipefail选项直接获取管道返回码

如果你只需要curl的返回码,且能接受tee失败时返回tee的错误码,可以开启pipefail选项:

#!/usr/bin/bash

# 开启pipefail:管道的退出状态为最后一个非零命令的退出码
set -o pipefail

curl --max-time 5 "https://google.com" | tee "page.html"
# 此时$?就是curl的返回码(如果curl失败),或者tee的返回码(如果tee失败)
rc=$?

echo "return code: $rc"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:40:06