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

Bash脚本中如何将带参数函数的返回值存入变量?

问题分析

你碰到的核心问题是对Shell函数的return和命令替换$(...)的逻辑理解有偏差:

  • Shell里函数的return语句返回的是退出状态码(范围0-255,0代表成功,非0代表失败),这个值不会被$(...)捕获;
  • $(command)的作用是抓取命令/函数输出到**标准输出(stdout)**的内容,你的函数没有任何输出内容,所以VAR自然是空的。
解决方案

根据你的需求,有两种处理方式:

方式1:直接利用退出状态码判断(推荐,符合Shell使用习惯)

如果只是需要判断函数的执行结果,不需要把0/1存到变量里,可以直接在if语句中调用函数:

function screen_exists() { 
    if screen -list | grep -q "${1}"; then 
        return 0 
    else 
        return 1 
    fi 
}

# 直接通过if判断函数的退出状态码
if screen_exists "${PLAYER_SCREEN_NAME}"; then
    echo "目标screen存在"
else
    echo "目标screen不存在"
fi

方式2:让函数输出0/1到标准输出(实现变量存储)

如果你确实需要把0/1存储到变量中,需要修改函数,用echo输出结果而非return:

function screen_exists() { 
    if screen -list | grep -q "${1}"; then 
        echo 0 
    else 
        echo 1 
    fi 
}

# 此时$(...)可以捕获echo输出的内容
VAR=$(screen_exists "${PLAYER_SCREEN_NAME}")
echo ${VAR}  # 会输出0或1

另外,你的函数还可以简化成更简洁的一行写法:

function screen_exists() {
    screen -list | grep -q "${1}" && echo 0 || echo 1
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:42:22