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
相关产品推荐
相关产品推荐

