如何编写Bash函数:非空输出正常运行,空输出则失败
实现
cat_or_fails:非空输入输出,空输入失败 下面提供几种无需额外安装工具的实现方式,满足你对输入为空时命令失败、非空时原样输出的需求:
纯Bash函数实现(无外部依赖)
完全用Bash内置功能实现,适合大多数场景:
cat_or_fails() { # 读取所有标准输入内容,保留原始换行符 local content content=$(cat) local read_exit=$? # 先处理输入流本身的错误(比如读取中断) if [[ $read_exit -ne 0 ]]; then return $read_exit fi # 判断内容是否为空 if [[ -z "$content" ]]; then return 1 else printf '%s' "$content" return 0 fi }
Awk实现(适合大文件/流式处理)
如果处理大文件不想把内容全部读进内存,用awk逐行处理更高效:
cat_or_fails() { awk ' BEGIN { has_content = 0 } # 输出每一行,并标记存在有效内容 { print; has_content = 1 } # 结束时根据标记返回状态:无内容则失败 END { exit !has_content } ' }
如果需要区分「完全无输入」和「只有空行/空白字符」,可以修改判断逻辑:
cat_or_fails() { awk ' BEGIN { has_content = 0 } # 仅当行内有非空白字符时标记有效内容 /[^[:space:]]/ { has_content = 1 } # 始终输出所有行 { print } END { exit !has_content } ' }
使用方法
把上述函数定义加到你的Shell脚本或~/.bashrc中,即可按你的示例调用:
example() { do_something_interesting_here "$1" | cat_or_fails }
注意给$1加上双引号,避免参数包含空格或特殊字符时出现异常。
内容的提问来源于stack exchange,提问作者eloyesp
相关产品推荐
相关产品推荐

