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

从终端带参数调用Bash脚本函数失效,输出为空

问题分析与解决

你的脚本执行./script.sh getPID contains时输出为空,核心原因是main函数调用指定函数时没有传递后续参数:

当执行该命令时,main函数的$1是getPID,$2是contains。原main函数的逻辑是[ -z "$1" ] && { getPID "$@"; } || $1,由于$1不为空,会执行$1——也就是直接调用getPID,但没有传递任何参数给它,导致getPID里的a=$1为空,后续的if分支都不触发,最终PID变量为空,输出自然为空。

修复方案

修改main函数的逻辑,确保调用指定函数时传递后续的参数:

function main {
    if [ -z "$1" ]; then
        getPID "$@"
    else
        # 提取函数名,移除第一个参数后传递剩余参数
        local target_func="$1"
        shift
        "$target_func" "$@"
    fi
}

或者更简洁的单行写法:

function main {
    [ -z "$1" ] && getPID "$@" || { local f="$1"; shift; "$f" "$@"; }
}

验证效果

修改后执行./script.sh getPID contains,main函数会提取getPID作为目标函数,将剩下的contains作为参数传递给它,getPID里的a会被赋值为contains,进而执行pgrep -f service并输出对应的PID。

内容的提问来源于stack exchange,提问作者Nitin Alety

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:22:35