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

在Bash函数的CASE解析阶段整合可选数组解析逻辑

优化Bash的multary函数参数解析逻辑

这个Bash函数用于向多个数组填充元素,调用语法如下:

multary OPTIONS ary1 ary2 ary3 "item1" "item2" marker "item3" marker "item4"

其中ary1、ary2、ary3为可选的目标数组参数。原函数在PART2部分单独处理数组参数的解析,现在需要简化参数读取逻辑,把PART2中的数组解析逻辑整合到处理位置参数的case分支中。

原函数代码

multary ()
 {
  ## 传递多个数组,用标记分隔
  ## 分隔标记
  local dna="***" dnb="***"

  while (( $# > 0 )); do
   parg="$1"
   case "$parg" in
     ("-m1") dna="$2" ; shift 2 ;;
     ("-m2") dnb="$2" ; shift 2 ;;
     ("--") shift 1 ; break ;;
     (*) break ;;
   esac
  done

  ##====================================================
  ## PART2:单独处理数组参数解析

  if [[ "$(declare -p $1)" =~ "declare -a" ]]; then
    typeset -n _ary1="$1"
    _ary1=() ; shift 1
    echo "_ary1 is an array"
  fi

  if [[ "$(declare -p $1)" =~ "declare -a" ]]; then
    typeset -n _ary2="$1"
    _ary2=() ; shift 1
    echo "_ary2 is an array"
  fi

  if [[ "$(declare -p $1)" =~ "declare -a" ]]; then
    typeset -n _ary3="$1"
    _ary3=() ; shift 1
    echo "_ary3 is an array"
  fi
}

修改后的函数代码(整合数组解析到case阶段)

multary ()
 {
  ## 传递多个数组,用标记分隔
  ## 分隔标记
  local dna="***" dnb="***"
  # 跟踪已处理的数组数量,最多支持3个
  local ary_count=0

  while (( $# > 0 )); do
   parg="$1"
   case "$parg" in
     ("-m1") dna="$2" ; shift 2 ;;
     ("-m2") dnb="$2" ; shift 2 ;;
     ("--") shift 1 ; break ;;
     (*)
       # 判断当前参数是否为已声明的数组,避免未声明参数报错
       if [[ "$(declare -p "$parg" 2>/dev/null)" =~ "declare -a" ]] && (( ary_count < 3 )); then
         # 使用 nameref 关联目标数组并清空
         typeset -n _ary="$parg"
         _ary=()
         echo "_ary$((ary_count+1)) is an array"
         ary_count=$((ary_count+1))
         shift 1
       else
         # 非数组参数,退出循环以处理后续元素和标记
         break
       fi
       ;;
   esac
  done
}

修改说明

  1. 新增ary_count变量跟踪已处理数组数量,确保不超过原函数支持的3个数组上限。
  2. 将原PART2的数组判断逻辑移入case默认分支:
    • 加入2>/dev/null屏蔽参数未声明时的错误输出,增强鲁棒性。
    • 若当前参数是数组且未达上限,就通过typeset -n关联目标数组、清空数组后移动参数指针。
  3. 遇到非数组参数时直接退出循环,与原逻辑保持一致,方便后续处理元素和分隔标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:42:47