Bash 中的多维关联数组

2024-04-17

我正在尝试创建一个多维关联数组,但需要一些帮助。我已审查过这个SO答案中建议的页面 https://stackoverflow.com/questions/3020713/how-to-print-bash-varibles-contents-into-two-dimensional-array-bash-shell但这让我更加困惑。到目前为止,这是我所拥有的:

剧本:

#!/bin/bash
declare -A PERSONS
declare -A PERSON
PERSON["FNAME"]='John'
PERSON["LNAME"]='Andrew'
PERSONS["1"]=${PERSON[@]}
PERSON["FNAME"]='Elen'
PERSON["LNAME"]='Murray'
PERSONS["2"]=${PERSON[@]}
for KEY in "${!PERSONS[@]}"; do
 TMP="${PERSONS["$KEY"]}"
 echo "$KEY - $TMP"
 echo "${TMP["FNAME"]}"
 echo "${TMP["LNAME"]}"
done

输出:

1 - John Andrew
John Andrew
John Andrew
2 - Elen Murray
Elen Murray
Elen Murray

正如您所看到的,尝试在 for 循环中访问 $TMP 数组的特定索引会返回整个数组。

[问] 我需要做什么才能分别访问$TMP数组中的“FNAME”和“LNAME”索引for loop?

Thanks.


你无法做你想做的事:bash 数组 http://www.gnu.org/software/bash/manual/bashref.html#Arrays是一维的

$ declare -A PERSONS
$ declare -A PERSON
$ PERSON["FNAME"]='John'
$ PERSON["LNAME"]='Andrew'
$ declare -p PERSON
declare -A PERSON='([FNAME]="John" [LNAME]="Andrew" )'
$ PERSONS[1]=([FNAME]="John" [LNAME]="Andrew" )
bash: PERSONS[1]: cannot assign list to array member

您可以通过编写合适的数组索引字符串来伪造多维性:

declare -A PERSONS
declare -A PERSON

PERSON["FNAME"]='John'
PERSON["LNAME"]='Andrew'
i=1
for key in "${!PERSON[@]}"; do
  PERSONS[$i,$key]=${PERSON[$key]}
done

PERSON["FNAME"]='Elen'
PERSON["LNAME"]='Murray'
((i++))
for key in "${!PERSON[@]}"; do
  PERSONS[$i,$key]=${PERSON[$key]}
done

declare -p PERSONS
# ==> declare -A PERSONS='([1,LNAME]="Andrew" [2,FNAME]="Elen" [1,FNAME]="John" [2,LNAME]="Murray" )'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash 中的多维关联数组 的相关文章

  • bash 用变量值替换字符串中的变量名

    这有点奇怪 我有以下字符串 我有一个名为 REDIRECT 的变量设置为 https working MYDOMAIN blah blah 我需要将 MYDOMAIN 替换为分配给 MYDOMAIN 的变量的实际值 不确定 bash 还是
  • 为什么在二维数组中 a 和 *a 指向相同的地址? [复制]

    这个问题在这里已经有答案了 我只是想了解二维数组是如何实现的以及内存分配是如何发生的 所以我对给定的 c 程序有些疑问 为什么 a 和 a 给出相同的地址 include
  • 为 Ruby/Rails 动态更改 iTerm2 选项卡标题

    我使用的是 iTerm2 通常会打开许多 选项卡 不幸的是 所有选项卡都显示相同的标题 ruby 因为它都是 ruby 脚本 但一个是rails服务器 另一个是rails控制台 下一个是 spork 我想将选项卡标题动态设置为 服务器 控制
  • bash 别名中允许使用哪些字符[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近添加了 alias cd alias cd alias cd 到我的 bash aliases 文件 玩弄这个 我注意到在别名时 被
  • 多维数组上的数组合并

    要么我是瞎子 要么我在任何地方都找不到这个问题 昨天我在合并数组时遇到了问题 我可以在 SO 的帮助下解决这个问题 今天 我再次遇到了合并数组的问题 但这一次是多维数组 我有一个数组 usergroup groups 和一个数组 userg
  • 如何替换带引号的多单词字符串作为参数?

    我正在尝试替换包含多个带引号的单词的字符串变量作为命令的参数 因此 给出以下示例脚本 请注意 shebang 中的 x 这会导致输出被记录到 stderr bin bash x myArg hello world echo string i
  • Java 中的 ConcurrentHashMap 和 Hashtable [重复]

    这个问题在这里已经有答案了 Java 中的 ConcurrentHashMap 和 Hashtable 有什么区别 哪个对于线程应用程序更有效 ConcurrentHashMap 和 Hashtable 锁定机制 Hashtable属于Co
  • 如何替换每行中出现的所有字符串?

    我想在以下脚本中将所有出现的 用户名 替换为 但它仅替换第一次出现的情况 ls al sed s username 这就是 sed 默认情况下的工作方式吗 提前致谢 你需要g 全局 修饰符 sed s username g
  • 为什么 .Net 词典中的条目是按加法顺序排列的?

    我刚刚看到这种行为 我对此感到有点惊讶 如果我向字典中添加 3 或 4 个元素 然后执行 For Each 来获取所有键 它们将以我添加的顺序出现 这让我感到惊讶的原因是字典内部应该是一个哈希表 所以我希望事情能以任何顺序出现 按键的哈希排
  • 如何从 C 文件更改终端中的目录

    如何从 C 程序更改将在终端上生效的目录 实际上不要告诉 system 函数或 chdir 函数 这些仅适用于 C 中的进程或子 shell 假设我正在从 bash shell 执行一个 C 程序 其进程 ID 为 10223 那么 我可以
  • 寻找下一个开放端口

    有没有什么办法 使用基本的 Unix 命令 找到下一个未使用的端口号 从端口 4444 开始向上 我通过 ssh 通过 openssh 进入 Windows XP 计算机 运行 Cygwin 工具并使用 bash shell 谢谢 戴夫 尝
  • 如何从脚本向 sudo 提供密码?

    请注意 这是在我的本地计算机上运行的来宾虚拟机 VBox 我不担心安全性 我正在编写一个将在 Linux Ubuntu VM 上执行的脚本myuser用户 该脚本将在下面创建一个非常大的目录树 etc myapp 目前我必须手动完成所有这些
  • 如何“grep”连续流?

    可以用吗grep在连续的流中 我的意思是有点tail f
  • Bash - 如何将参数传递给通过标准输入读取的脚本

    我正在尝试从标准输入执行脚本并将参数传递给它 有办法做到吗 假设我有以下内容 cat script sh bash 我如何将参数传递给脚本 我不想这样做 bash script sh arguments 也不是这个 script sh ar
  • 获取单词中重复次数最多的字母的数量

    我正在尝试计算单词中重复次数最多的字母的数量 function GreatestCount str var count for var i 0 i
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • 访问 bash 命令行参数 $@ 与 $*

    在许多 SO 问题和 bash 教程中 我发现可以通过两种方式访问 bash 脚本中的命令行参数 gt cat testargs sh bin bash echo you passed me echo you passed me 结果是 g
  • 以编程方式将列名称添加到 numpy ndarray

    我正在尝试将列名称添加到 numpy ndarray 然后按名称选择列 但这不起作用 我无法判断问题是在添加名称时出现 还是在稍后尝试调用它们时出现 这是我的代码 data np genfromtxt csv file delimiter
  • 从 bash 脚本运行节点

    很简单 我正在尝试使用 cron 自动运行 nodejs 脚本 但是脚本本身似乎无法运行该文件 我的脚本很简单 usr bin env node node var node assets js update js 但是 在运行此命令时 它返
  • 将对象映射到 TableView 部分的 Swift 二维数组

    我想不出更好的方法来做到这一点 我将学生对象的所有属性映射到二维数组中 所以我的电视有几个部分 我也不能使用静态表视图 如果是这样 这个问题就不会存在 所以我在 TVC 中的代码 let currentUser PFUser current

随机推荐

  • 在 Sproutcore 2 中编写自定义控件

    我对 Sproutcore 相当陌生 但对 Handlebars 很熟悉 我已经浏览了 Todo 教程并查看了其他一些示例 我喜欢它的一切 并且想在 Backbone 上使用它 但我很难理解如何连接自定义控件 我可以看到一些数据将在绑定中发
  • 使用 BeanUtils 检索字段值

    我想提取未由某些自定义注释标记的私有字段值 这可以通过 BeanUtils 实现吗 如果是 怎么办 是的 假设您知道字段名称 您可以使用PropertyUtils getSimpleProperty http commons apache
  • “git stash”是否在内部“提交”到我的本地存储库?

    我以前只手动commit之前到我的本地仓库pushing 到远程仓库 但更多时候我pull获取我的编码伙伴的更改 有时我们都处理同一个文件并且存在冲突 在这些情况下 他告诉我要做一个git stash在我之前git pull然后一个git
  • 如何在没有 root 权限的情况下安装 python 3.x 和 2.y

    我正在一台没有root权限的共享机器上工作 但安装了Python 2 y 但我想要两种风格的Python 而且我想调用Python 2 y 只需键入 python 像往常一样 并为调用 Python 3 x 输入 python3 我知道这是
  • 如何使mat-select始终在angular2中的表单字段下打开?

    我需要角度材料垫选择组件在其表单字段的正下方打开 但它会打开所选选项位置上的下拉菜单 并且容器会根据所选选项稍微移动到顶部 有没有办法打开表单字段正下方的下拉容器 该行为是由 Material Design 规定的 您可以使用以下命令关闭所
  • 针对特定 EF Core 查询优化未知

    我有一个使用 EF Core 3 1 在 NET Framework 上运行的 webjob 项目 Webjob 处理来自 Azure 服务总线的消息并将其保存到 Azure SQL 数据库中 我遇到的问题是 Azure SQL 数据库为
  • Python psycopg2 不是 utf-8

    我使用 Python 连接到我的 postgresql 数据库 如下所示 conn psycopg2 connect database fedour user fedpur password host 127 0 0 1 port 5432
  • 无法从 D 中的 std.range 中切片 Take!R?

    我正在尝试使用切片运算符从 std range 获取 take 函数的返回值的切片 我的代码 auto tempChunk a b c d auto a tempChunk take 3 writeln a 0 2 由于本例中的 Take
  • 按后缀组合列表元素

    给定两个带后缀的列表 l1 C 1 B 1 A l2 B 2 C 2 D 我想像这样组合它们 C 1 C 2 B 1 B 2 A D 元素将与l1作为锚 这意味着 如果C 出现在之前B in l1 相同的顺序将保留在输出中 此外 具有相同前
  • 使用 Razor、ASP.NET MVC 3 和 .NET 4.0 主从创建视图

    我是 NET 的新手 如果我有任何愚蠢的错误 请耐心等待 我正在使用 ASP NET MVC 3 和 NET 4 0 我想要一个 Create 具有子模型的模型的视图 该视图应包含子模型的partial Create 视图 我将使用以下简单
  • 从 utf8_unicode_ci Mysql 表打印文本时出现错误字符

    我将文本插入 更新到 utf8 unicode ci 编码表mysql query SET NAMES utf8 它在 mysql 表中显示为 但是当我用 PHP 打印它时 它看起来像 在页面上 我尝试添加 但没有用 如何在页面上正确显示
  • 如何使用MediaControllerCompat来控制当前播放器?

    我的应用程序不是媒体播放器 我只是希望能够使用新的控制当前的媒体播放器媒体控制器兼容 http developer android com reference android support v4 media session MediaCo
  • Nvidia Theano docker 镜像不可用

    尝试运行 docker 命令 nvidia docker run d p 8888 8888 e PASSWORD 123abcChangeThis theano secure start notebook sh Then open you
  • 如何将存储库注入到 Symfony 中的服务中?

    我需要将两个对象注入ImageService 其中一个例子是Repository ImageRepository 我得到这样的 image repository container gt get doctrine odm mongodb g
  • plesk 上的 docker 中的 Neo4j(3.4.17、3.5.13、4.0.0)不使用 /ssl 中提供的 SSL 证书,而是尝试删除它们并进行自己的自签名

    此配置在某些时候对我有用 但由于没有启用自动续订 在短暂的 VPS 暂停后就停止了 根据文档 我在一个文件夹中提供了 neo4j cert 和 neo4j key 然后将其安装在 ssl 的容器上 不幸的是 neo4j 将停留在 清理自生成
  • 如何在哈希表末尾添加键/值对?

    我正在尝试使用 PowerShell 脚本计算代码计数 我在互联网上找到了一个脚本 并尝试在末尾添加总行 我已经添加了栏目 CountHash Add Total Total 在最后 Param string path string out
  • 提取元素文本值

    我在用JAXB使用以下命令生成将 xml 解组为 java 实体的代码xsd原理图文件 问题是生成的代码不会生成name of an organization在以下 xml 中指定
  • 直接从浏览器发送文件到 S3 但更改文件名

    我在用签署授权的 S3 上传 https aws amazon com articles 1434这样用户就可以绕过我的服务器直接从浏览器上传文件到 S3 目前这可以工作 但文件名与用户计算机上的文件名相同 我想将其以不同的名称保存在 S3
  • Mercurial 合并两个命名分支:工作目录没有祖先

    我有两个命名分支 SPRINT 009 和 SPRINT 010 一些变更集已提交给 SPRINT 009 我想将其合并到 SPRINT 010 中 我能够毫无问题地将分支中的变更集合并回默认值 我在将变更集从branch one合并到br
  • Bash 中的多维关联数组

    我正在尝试创建一个多维关联数组 但需要一些帮助 我已审查过这个SO答案中建议的页面 https stackoverflow com questions 3020713 how to print bash varibles contents