gpt4 book ai didi

arrays - bash 将文件读入关联数组

转载 作者:行者123 更新时间:2023-12-04 10:04:04 26 4
gpt4 key购买 nike

我可以使用单个语句将文件读入常规数组:

local -a ary
readarray -t ary < $fileName

没有发生的是将文件读入 assoc。阵列。

我可以控制文件创建,因此如果可能的话,我希望尽可能简单地不使用循环。

所以文件内容可以如下读取:
keyname=valueInfo

但是如果减少代码,特别是在上面的单行代码中,我愿意用另一个字符串替换 = 。

还有...

那么是否有可能使用类似 until 的东西将这样的文件读入关联数组中?或 from - 即读入一个 assoc 数组直到它遇到一个单词,或者我是否必须将其作为循环的一部分来执行?

这将允许我在同一个文件中保留很多相似的值,但读入单独的数组。

我看了 mapfile同样,但与 readarray 相同.

最后...

我正在创建一个选项列表 - 从中​​选择 - 如下:
local -a arr=("${!1}")
select option in ${arr[*]}; do
echo ${option}
break
done

工作正常 - 但是显示的列表没有排序。如果可能的话,我想对它进行排序。

希望将所有 3 个问题都放在 1 中是可以的,因为这些问题是相似的——都在数组上。

谢谢。

最佳答案

首先,关联数组是用 -A 声明的。不是 -a :

local -A ary

如果你想在全局范围内声明一个变量,使用 declare在函数之外:
declare -A ary

或使用 -g如果 BASH_VERSION >= 4.2 .

如果您的线路确实有 keyname=valueInfo , 与 readarray ,你可以这样处理:
readarray -t lines < "$fileName"

for line in "${lines[@]}"; do
key=${line%%=*}
value=${line#*=}
ary[$key]=$value ## Or simply ary[${line%%=*}]=${line#*=}
done

使用 while read循环也可以是一个选项:
while IFS= read -r line; do
ary[${line%%=*}]=${line#*=}
done < "$fileName"

或者
while IFS== read -r key value; do
ary[$key]=$value
done < "$fileName"

关于arrays - bash 将文件读入关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com