You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:40:30