Bash脚本实现用户自定义文件类型覆盖默认配置的方法
解决方案
核心思路是把默认值和用户输入值的赋值逻辑拆分,先处理所有用户输入参数,最后判断是否需要回填默认值,避免默认值和自定义值冲突。
修改后的完整代码
local default_incl=( ".rc" ".el" ".c" ".f" ) local incl=() local has_custom_incl=false while (( $# > 0 )); do opt="$1" case $opt in ("--FS") fs="$2" ; shift ; shift ;; ("--incl") incl+=("$2") has_custom_incl=true shift ; shift ;; (*) break ;; esac done # 无自定义传入时回填默认值 if [ "$has_custom_incl" = false ]; then incl=( "${default_incl[@]}" ) fi
改动说明
- 原逻辑先给
incl数组赋值默认值,遇到--incl参数时用+=追加,导致默认值始终保留 - 新逻辑将默认值存储到独立的
default_incl变量,初始化incl为空数组 - 新增
has_custom_incl标志位,只要用户传入过--incl就标记为true,避免用户传入空后缀时的判断异常 - 参数解析完成后统一判断:如果用户没有传入过自定义类型,才把默认值赋值给
incl数组 - 天然支持用户多次传入
--incl添加多个自定义文件类型,比如执行时传入--incl .py --incl .js,最终incl数组仅包含.py和.js两个值
如果你希望支持单次
--incl传入多个空格分隔的后缀,比如--incl ".py .js .ts",可以将incl+=("$2")改为incl+=($2)即可,但要注意后缀名不要包含空格。
如果要求每次传入--incl都覆盖之前的自定义值,仅保留最后一次传入的后缀,将incl+=("$2")改为incl=("$2")即可。
内容的提问来源于stack exchange,提问作者Dilna
相关产品推荐
相关产品推荐

