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

如何在Bash中实现与变量关联的字符串列表?

Bash中实现多组索引变量的简洁方案

你想要创建$one、$two这类变量,通过$one[1]返回"a"、$one[2]返回"b"这类效果,Bash确实没有原生二维数组,用case语句太啰嗦,这里给你两种更简洁的实现思路,先说说你自己的代码逻辑,再拓展到多组变量的场景:

你的现有单数组实现

你给出的代码是单组索引的基础实现,用普通数组就能搞定:

example=(a b c d e)
read selection
# 写入文件
printf ${example[$selection]} > file

注意Bash数组默认从0开始索引,所以example[0]是"a",如果要让输入1对应"a",可以给数组加个空的首元素:example=("" a b c d e),这样example[1]就返回"a"了。

实现多组类似$one/$two的索引变量

如果要同时维护多组这样的索引集合,有两种简洁方式:

方式1:定义多个普通数组+间接引用

直接给每组数据单独定义数组,再通过间接引用动态调用:

# 定义多组数组,下标从1开始,首元素留空
one=("" a b c d e)
two=("" x y z)
three=("" foo bar baz qux)

# 读取用户选择的数组名和索引
read -p "输入数组名(one/two/three): " arr_name
read -p "输入索引: " idx

# 间接引用获取对应数组的元素并写入文件
printf "${!arr_name[$idx]}" > file

这里${!arr_name[$idx]}是Bash的间接引用语法,会把arr_name的值当作数组名,再取对应索引的元素。

方式2:用关联数组模拟二维结构

如果组数和索引比较灵活,不想定义大量单独数组,可以用关联数组,把键设为数组名_索引的形式:

# 声明关联数组
declare -A multi_arr

# 给不同组的索引赋值
multi_arr["one_1"]="a"
multi_arr["one_2"]="b"
multi_arr["two_1"]="x"
multi_arr["two_2"]="y"
multi_arr["three_3"]="baz"

# 读取输入并取值写入文件
read arr_name idx
printf "${multi_arr["${arr_name}_${idx}"]}" > file

这种方式不需要提前定义固定数组,新增组或索引直接给关联数组加键值对就行,适合动态场景。

这两种方法都比写一堆case语句简洁太多,维护起来也方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:31:09