有时,公司当前的shell 脚本是按顺序解析的N个参数,且有固定含义。后面需要扩展时十分不方便,之前的参数我们可能用不到,新增太多参数又会在调用时比较复杂。
为避免对就参数的修改,新增 -A, -B .... 等拓展可配置参数适应多情况。下面用GPT写了个demo
#!/bin/bash
# explain####################
#input : ./optDbg.sh a b c -A a.txt -B -- b.txt
#output:
#PKG_A : a.txt
#PKG_B : --
#Verbose : false
#Positionals:
#a
#b
#c
#b.txt
#first item: a
###############
verbose=false
positional_args=()
PKG_A=""
PKG_B=""
# 参数解析
while [[ $# -gt 0 ]]; do
case "$1" in
-A)
PKG_A="$2"
shift 2 #移除已解析的参数
;;
-B)
PKG_B="$2"
shift 2
;;
-v|--verbose)
verbose=true
shift
;;
--) # 显式参数结束标志,跳过,不再按- 解析后面参数。
shift
break
;;
-*) # 未知选项
echo "Unknown option: $1"
exit 1
;;
*) # 位置参数
positional_args+=("$1")
shift
;;
esac
done
# 如果 -- 之后还有位置参数,加进去
while [[ $# -gt 0 ]]; do
positional_args+=("$1")
shift
done
# 输出测试
echo "PKG_A : $PKG_A"
echo "PKG_B : $PKG_B"
echo "Verbose : $verbose"
echo "Positionals:"
for arg in "${positional_args[@]}"; do
echo " $arg"
done
echo "first item: ${positional_args[0]}"
前面的参数可解析到 positional_args 数组里面,这块可保持不变。
新增的参数用-A, -B 等额外解析。
这样即可兼容之前的,又可能使用新参数功能了。
示例&spm=1001.2101.3001.5002&articleId=147550393&d=1&t=3&u=7e30580b273a41c58ca51eae5d855c3b)
377

被折叠的 条评论
为什么被折叠?



