如何在Bash脚本中创建包含多变量/值的‘对象’
更易维护的角色属性管理方案
你现在用case语句的方式,确实会在新增角色时变得越来越繁琐,这里给你几个更适合的替代方案:
方案1:关联数组(Bash 4.0及以上支持)
用关联数组可以把每个角色的所有属性打包成独立的集合,新增角色只需要加一组数组定义就行,不用改逻辑分支:
# 定义角色关联数组 declare -A npc1=( [name]="NPC" [hp]=100 [atk]=20 [def]=10 ) declare -A npc2=( [name]="Bandit" [hp]=80 [atk]=25 [def]=8 ) # 调用属性示例 selected="npc1" echo "角色名: ${!selected[name]}" echo "生命值: ${!selected[hp]}"
方案2:函数初始化角色
如果需要动态创建角色,或者想复用初始化逻辑,用函数来封装属性赋值会更灵活:
# 初始化角色的函数,返回属性字符串 init_npc() { echo "$1 $2 $3 $4" # 参数依次是name、hp、atk、def } # 创建角色并存储属性 npc1=$(init_npc "NPC" 100 20 10) npc2=$(init_npc "Bandit" 80 25 8) # 解析属性示例 read n1_name n1_hp n1_atk n1_def <<< "$npc1" echo "NPC1 攻击力: $n1_atk"
方案3:配置文件存储(适合大量角色)
如果要加很多角色,把属性写到单独的配置文件里会更清晰,比如创建npcs.conf:
NPC 100 20 10 Bandit 80 25 8 Guard 120 18 15
然后用脚本读取并存储:
declare -A npcs # 逐行读取配置文件 while read -r name hp atk def; do npcs["$name,hp"]=$hp npcs["$name,atk"]=$atk npcs["$name,def"]=$def done < npcs.conf # 使用属性示例 echo "Guard 的防御值: ${npcs["Guard,def"]}"
这几种方式都比case分支更易扩展,新增角色时不用修改核心逻辑,直接加定义或配置就行。
内容的提问来源于stack exchange,提问作者clockwork
相关产品推荐
相关产品推荐

