Bash单键多值关联数组遍历方法求助
Bash关联数组一键多值的遍历方法
Bash的关联数组默认一个键只能存单个值,重复赋值会直接覆盖之前的内容,所以要实现一键多值,得把每个键对应的值做成数组(或者用分隔符拼接的字符串),再嵌套遍历。
方法一:嵌套数组(推荐,值含空格也适用)
先声明关联数组,每个键对应一个普通数组:
declare -A X # 给s1赋值包含两个元素的数组 X[s1]=( "firstname" "secondname" ) X[s2]=( "surname" ) X[s3]=( "other" ) # 遍历关联数组的所有键 for key in "${!X[@]}"; do # 取出当前键对应的数组 values=("${X[$key]}") # 逐个遍历数组元素并输出 for val in "${values[@]}"; do echo "$key, $val" done done
方法二:分隔符拼接字符串(适合值无特殊分隔符的场景)
如果值里没有特殊字符(比如|),可以把多个值用分隔符拼起来,遍历的时候再拆分:
declare -A X=( ['s1']="firstname|secondname" ['s2']="surname" ['s3']="other" ) for key in "${!X[@]}"; do # 用|作为分隔符,把字符串拆成数组 IFS='|' read -ra values <<< "${X[$key]}" for val in "${values[@]}"; do echo "$key, $val" done done
两种方法运行后都会输出你想要的结果:
s1, firstname s1, secondname s2, surname s3, other
内容的提问来源于stack exchange,提问作者desert_ranger
相关产品推荐
相关产品推荐

