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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:24:03