Bash函数:如何输出错误信息而非存入变量,双值有效才续行?
解决方案
核心问题是你把错误信息输出到了stdout,导致被$(...)捕获进变量,而且函数里的exit 1只会退出子shell,主脚本还会继续执行。按下面的方式修改,就能实现错误信息直接打印到屏幕,且只有两个值都获取成功时才继续运行脚本:
修改后的代码
get_value() { # 执行命令并捕获输出,同时屏蔽命令自身的错误输出 VALUE="$(*RUNNING COMMAND* 2>/dev/null)" if [ -z "$VALUE" ]; then # 错误信息输出到stderr,不会被$(...)捕获 echo "ERROR: Could not find value for input '$1'" >&2 return 1 # 返回失败的退出码,告知主脚本调用失败 else echo "$VALUE" # 有效值输出到stdout,供$(...)捕获 return 0 fi } print_value() { VAR1="not_exists" VAR2="exists" # 逐个获取值并检查结果 if ! value1=$(get_value "$VAR1"); then echo "请先创建$VAR1对应的值" >&2 exit 1 fi if ! value2=$(get_value "$VAR2"); then echo "请先创建$VAR2对应的值" >&2 exit 1 fi # 只有两个值都获取成功才会执行到这里 echo "$value1 and $value2" } # 调用测试 print_value
关键修改点说明
- 错误信息定向到stderr:用
echo ... >&2输出错误,这样内容会直接显示在终端,不会被$(...)捕获进变量。 - 用return代替exit:函数内的
return 1仅标记本次调用失败,不会退出整个脚本;主脚本可以通过这个退出码判断是否获取成功。 - 逐个检查调用结果:每次调用
get_value后用if ! ...判断状态,失败时明确提示缺失的变量,然后终止主脚本。 - 变量添加引号:比如
"$VALUE"、"$1",避免输入值包含空格时出现逻辑错误。
修改后,当VAR1对应的获取失败时,终端会显示:
ERROR: Could not find value for input 'not_exists' 请先创建not_exists对应的值
主脚本会直接终止;只有两个值都获取成功时,才会输出value1 and value2。
内容的提问来源于stack exchange,提问作者N. J
相关产品推荐
相关产品推荐

