【问题标题】:Bash- populate an associative array using a loopBash- 使用循环填充关联数组
【发布时间】:2015-01-07 11:32:45
【问题描述】:

所以我要把这个输入到关联数组中:

47 SPRINGGREEN2
48 SPRINGGREEN1
49 MEDIUMSPRINGGREEN
50 CYAN2
51 CYAN1
52 DARKRED
53 DEEPPINK4

它是 bash 脚本的一部分。 我正在寻找一种方法来制作一个关联数组,所以它看起来像

    declare -A cols=( [SPRINGGREEN2]="0;47"...[DEEPPINK4]="0;53" )

我可以很容易地手动完成。

但我想使用 for 循环来填充数组 cols=( [KEY]="vALUE" ) For 循环将采用 47、48、49...53 并将其输出到 VALUE 字段中, 和 SPRINGGREEN2...DEEPPINK4 进入关键领域。

我在考虑使用 awk,但不知道如何隔离这两个字段并使用每个条目来填充数组。

【问题讨论】:

  • 使用while read 循环
  • key=']'; declare -A aarr=( ["$key"]=value )declare -A aarr=( [\]]=value ) 给出bash: []]=value: bad array subscript

标签: arrays bash awk associative-array


【解决方案1】:

您是否打算从文件中读取并填充 cols 数组?

declare -a cols
while read num color; do
    cols[$num]=$color
done < file.txt
for key in "${!cols[@]}"; do printf "%s\t%s\n" "$key" "${cols[$key]}"; done

另一方面,如果您已经有了关联数组并且还想要一个“反转”数组:

declare -a rev_cols
for color in "${!cols[@]}"; do
    rev_cols[${cols[$color]#*;}]=$color
done
for key in "${!rev_cols[@]}"; do printf "%s\t%s\n" "$key" "${rev_cols[$key]}"; done

【讨论】:

  • 如果键和值的集合与数组在同一个文件上(在这种情况下为 bash 脚本),是否有办法填充数组基本上我想将这些键、值输入到数组中然后将该数组用于其他用途。我有大约 255 个键,我需要将值放入关联数组中,我不想手动进行。
  • 请提供更多详细信息。剧本长什么样。请编辑您的问题。
  • 我还没有走到那一步。我所知道的是我想输入 255 行 Key 和 Values 并将它们输入到关联数组中。我想用那个数组做什么?它基本上将用于将输入/字符串打印成随机彩色字符。
  • 怎么样:创建一个单独的 bash 脚本,其中只包含变量声明。当你写一个想要使用颜色的脚本时,你可以source /path/to/colors.bash
  • 它可以工作,但它是用于作业,并且包含源文件会很麻烦。
猜你喜欢
  • 2013-06-25
  • 1970-01-01
  • 2012-04-16
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2014-04-09
相关资源
最近更新 更多