加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

数组 – bash4将文件读入关联数组

发布时间:2020-12-15 22:19:40 所属栏目:安全 来源:网络整理
导读:我能够使用单个语句将文件读入常规数组: local -a aryreadarray -t ary $fileName 没有发生的是将文件读入assoc.阵列. 我可以控制文件创建,因此如果可能的话,我希望尽可能简单地执行w / o循环. 因此,文件内容可以被读入: keyname=valueInfo 但是如果减少代
我能够使用单个语句将文件读入常规数组:

local -a ary
readarray -t ary < $fileName

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

我可以控制文件创建,因此如果可能的话,我希望尽可能简单地执行w / o循环.

因此,文件内容可以被读入:

keyname=valueInfo

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

而……

那么有可能使用诸如直到或从中读取这样的文件到一个关联数组中 – 即读入一个关联数组直到它命中一个单词,或者我必须这样做作为循环的一部分吗?

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

我也看了mapfile,但是和readarray一样.

最后……

我正在创建一个选项列表 – 从中??选择 – 如下所示:

local -a arr=("${!1}")
select option in ${arr[*]}; do
    echo ${option}
    break
done

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

希望可以将所有3个问题都归为1,因为问题是相似的 – 所有这些都在数组上.

谢谢.

解决方法

首先,关联数组用-A not -a声明:

local -A ary

如果要在全局范围内声明变量,请在函数外部使用声明:

declare -A ary

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

如果你的行确实有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读取循环也可以是一个选项:

while IFS= read -r line; do
    ary[${line%%=*}]=${line#*=}
done < "$fileName"

要么

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读