从终端带参数调用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
相关产品推荐
相关产品推荐

