为何Bash函数return 1但$?输出结果为0?
原因分析
- 核心问题是双引号的变量解析时机:你用双引号包裹
bash -c的参数时,当前shell会先解析其中的$?,把它替换成当前shell中最后一条命令的退出码(通常是0,因为之前无错误命令),再传递给bash -c执行。实际运行的命令已经变成bash -x -c "source pt2026_firmware; pt2026_start_firmware; echo 0",所以最终输出0。 - 调试日志显示函数执行了
return 1,说明函数本身逻辑正常,只是$?被提前替换了。
解决办法
有两种可行方案:
- 改用单引号包裹
bash -c参数:单引号会阻止当前shell解析变量,让$?在子shell中解析为函数执行后的退出码,命令改为:bash -x -c 'source pt2026_firmware; pt2026_start_firmware; echo $?' - 转义
$?的美元符号:如果必须用双引号,给$加反斜杠转义,避免当前shell解析,传递到子shell后再处理,命令改为:bash -x -c "source pt2026_firmware; pt2026_start_firmware; echo \$?"
内容的提问来源于stack exchange,提问作者Phillip
相关产品推荐
相关产品推荐

