Shell脚本中如何实现带提示的变量检查并传递退出码?
解决方案
没有标准的增强版test或echo工具直接支持你想要的“检查失败时输出提示并保留错误退出码”的功能,但可以通过Shell原生语法或自定义函数实现类似断言的效果,这是脚本开发中的常用做法:
1. 用命令组组合输出与退出
直接将echo和exit放在命令组中,确保整个分支的退出码由exit决定:
test "${FOO}" || { echo 'set FOO' >&2; exit 1; }
- 用
{}而非()可以避免创建子shell,效率更高;注意{后要有空格,结尾的;不能省略。 - 将输出重定向到
stderr(>&2)是更规范的做法,区分正常输出和错误提示。
2. 自定义断言函数
封装一个类似断言的函数,复用性更强,写法更简洁:
# 断言变量非空,失败时输出提示并返回错误码 assert_not_empty() { if [ -z "$1" ]; then echo "$2" >&2 return 1 fi } # 用法:检查FOO,失败时退出脚本 assert_not_empty "${FOO}" 'set FOO' || exit
如果希望断言失败直接退出脚本,可以把exit整合到函数里:
assert_not_empty_exit() { if [ -z "$1" ]; then echo "$2" >&2 exit 1 fi } # 用法更简洁 assert_not_empty_exit "${FOO}" 'set FOO'
3. 用false传递错误码
如果不想写函数,也可以用echo配合false让整个分支返回错误码:
test "${FOO}" || (echo 'set FOO' >&2 && false)
这里false会让括号内的命令组返回1,后续可以继续用|| exit触发脚本退出。
内容的提问来源于stack exchange,提问作者Vito De Tullio
相关产品推荐
相关产品推荐

