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

Bash脚本嵌套case调用函数无法通过命令行参数正常运行问题

Bash脚本命令行参数传递问题解决

你的脚本存在两个核心问题:

  1. 调用test函数时没有传递任何参数,导致函数内的$2始终为空,无法触发对应分支
  2. 死循环会持续重复处理启动脚本时传入的同一批参数,没有实际意义

原脚本代码

#!/bin/bash

trap 'echo "# $BASH_COMMAND";read' DEBUG


test () {  
    case "$2" in
    3) echo "3" 
       ;;
    4) echo "4" 
       ;;
    esac
}

while :
do
case "$1" in 

    1) echo "1" ;;
    2) test;;

esac
done

修正后的脚本(命令行参数版本)

#!/bin/bash

trap 'echo "# $BASH_COMMAND";read' DEBUG

test () {  
    case "$2" in
    3) echo "3" 
       ;;
    4) echo "4" 
       ;;
    *) echo "未匹配到3或4的参数"
       ;;
    esac
}

# 去掉死循环,命令行参数是启动时一次性传入的
case "$1" in 
    1) echo "1" ;;
    2) test "$@";; # 传递脚本所有命令行参数给test函数
    *) echo "未匹配到1或2的参数";;
esac

使用说明

  • 执行脚本时传入对应参数,比如:
    • 执行./script.sh 1,输出1
    • 执行./script.sh 2 3,输出3
    • 执行./script.sh 2 4,输出4

核心修改点

  • 调用test函数时使用test "$@",将脚本收到的所有命令行参数完整传递给函数,这样函数内的$2就是脚本的第二个命令行参数
  • 移除无意义的死循环,因为命令行参数是启动脚本时一次性传入的,重复处理同一参数没有价值
  • 添加默认分支,处理未匹配的参数情况,避免脚本无输出

内容的提问来源于stack exchange,提问作者Федор Ермолаев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:05:58