如何在调用get_value验证key存在时仅抑制成功输出?
Bash验证Key存在但不输出值的解决方案
核心思路:你的get_value函数中,错误提示通过die输出到了标准错误流(stderr),而成功时的数值结果输出到标准输出流(stdout)。只要将get_value的标准输出重定向到/dev/null(丢弃输出),就能实现「存在key时静默,不存在时保留错误提示」的需求,同时函数的退出状态会正常传递(成功返回0,失败返回1并触发退出)。
最简实现方式
直接修改validate_key_exists函数,调用get_value时重定向标准输出:
validate_key_exists() { local key="$1" # 丢弃标准输出,仅保留stderr的错误提示 get_value "$key" > /dev/null }
- 当key存在:
get_value执行成功,stdout被丢弃,无任何输出,函数返回0 - 当key不存在:
get_value调用die输出错误到stderr,同时退出脚本,错误信息正常显示
更灵活的扩展方式(给get_value加静默参数)
如果需要复用get_value的逻辑,同时支持「输出值」和「仅验证不输出」两种场景,可以给get_value添加可选参数:
die() { echo -e "$@" >&2 exit 1 } get_value() { local key="$1" local silent="${2:-0}" # 可选参数,默认0=输出值,1=静默 local value= value=$(awk ...) # 你的原有逻辑 [ -z "$value" ] && die "Key '$key' doesn't exist." # 仅非静默模式才输出值 if [ "$silent" -ne 1 ]; then echo "$value" fi } validate_key_exists() { local key="$1" # 传递静默参数1,仅验证不输出 get_value "$key" 1 } remove_key() { local key="$1" validate_key_exists "$key" # 你的删除逻辑... }
内容的提问来源于stack exchange,提问作者bler
相关产品推荐
相关产品推荐

