如何使用交替键和值的序列来定义 Bash 5.1 关联数组?

2024-02-18

我读到Bash 5.1 的发行说明 https://tiswww.case.edu/php/chet/bash/NEWS:

gg。可以使用复合赋值中的键值对列表来分配关联数组。单词不是 [key]=value 形式的复合赋值被假定为键值赋值。钥匙丢失或为空均属错误;缺失值被视为 NULL。作业不能混合使用两种形式。

检查Bash 5.1 参考手册 → 数组部分 https://www.gnu.org/software/bash/manual/bash.html#Arrays我看到这个新块(与Bash 4.4 参考手册 https://web.archive.org/web/20170426040945/https://www.gnu.org/software/bash/manual/bash.html#Arrays):

当分配给关联数组时,复合赋值中的单词可以是需要下标的赋值语句,也可以是被解释为交替键和值的序列的单词列表:name=(key1 value1 key2 value2 … )。这些的处理方式与name=( [key1]=value1 [key2]=value2 … )。列表中的第一个单词决定如何解释其余单词;列表中的所有分配必须属于同一类型。使用键/值对时,键不能缺失或为空;最终缺失值被视为空字符串。

这个语法也被内建的declare接受。可以使用以下方法将各个数组元素分配给name[subscript]=value上面介绍的语法。

于是我做了一个测试:

$ bash --version
GNU bash, version 5.1.0(1)-release (x86_64-apple-darwin18.5.0)
$ declare -a bla
$ bla=( [name]=me )
$ echo "${bla[name]}"
me      # it works well

但是,如果我使用新语法,它对我不起作用,它会返回键而不是值:

$ declare -a bla
$ ble=( name me )
$ echo "${ble[name]}"
name      # should be "me"

如何正确使用复合赋值作为交替键和值的序列?


这是定义关联数组的问题declare -A(注意“A”的大写字母):

declare -A bla
$ bla=(k1 v1 k2 v2)
$ echo "${bla[k1]}"
v1

如果您尝试混合分配,则会失败,如下所示:

$ bla=([k1]=v1 k2 v2)
bash: bla: k2: must use subscript when assigning associative array
bash: bla: v2: must use subscript when assigning associative array
$ bla=([k1]=v1 [k2]=v2)
$ echo "${bla[k2]}"
v2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用交替键和值的序列来定义 Bash 5.1 关联数组? 的相关文章

  • “实际或正式的参数列表长度不同”

    当我尝试将某些内容放入 括号中时Friends f new Friends friendsName friendsAge 它出现错误 Friends 类中的构造函数 Friends 不能应用于给定类型 必需 无参数 发现 字符串 整数 原因
  • UNIX 统计时间格式

    是否可以格式化 stat 的时间输出 我在用 stat c n A z filename 在 bash 脚本中 但它的时间格式不是我想要的 是否可以在命令中更改此格式 或者我必须稍后手动执行此操作 示例输出如下 lib drwxr xr x
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 如何在没有副本的情况下将结构转换为字节数组?

    StructLayout LayoutKind Explicit public struct struct1 FieldOffset 0 public byte a 1 byte FieldOffset 1 public int b 4 b
  • C 数组计数(初学者)[重复]

    这个问题在这里已经有答案了 我目前正在阅读 Kernighan 和 Richie 所著的 C 编程语言 我正在努力弄清楚一行代码的作用 我想我只是有点愚蠢 不太明白他们的解释 ndigit c 0 我不得不稍微改变一下程序ndigit之前给
  • Swift - 如何复制包含引用类型的数组

    我正在尝试复制数组及其值 为什么两个数组都引用同一个变量 您可以在 Playground 中尝试此操作 var view UIView view tag 1 var a UIView var b UIView a append view b
  • 如何处理“不符合”的数组?

    如何对两个数组进行逐元素算术运算 在第一维度中一致 但也有一个额外的维度 示例 乘法数组a 3 x 3 x 2 按数组b 3 x 3 a lt array 1 18 dim c 3 3 2 b lt diag 3 由于数组不一致 因此以下操
  • 将数组传递给函数 - 指针与引用(C++ 与 C)

    我有一个关于将数组传递给函数的最佳实践的广泛问题 因此 过去当我用 C 语言编程时 我想要一个函数的输入是一个数组 我会声明该函数的输入参数是一个指针 这效果相对较好 然而 我已经开始更多地使用 C 进行编程 并试图确定将数组传递到函数中的
  • 如何在 PHP 中比较两个数组并列出差异?

    我正在构建一个表单来执行以下操作 打印从 MySQL 获取的用户和权限表 用户拥有的每一项权限都是一个复选框 而他们缺少的每一项权限都是一个未选中的复选框 允许管理员选中和取消选中复选框以授予或删除权限 提交表单后 显示一个确认页面 其中仅
  • “/bin/bash -l”无效选项

    好吧 我正在尝试在我们的超级计算机上运行隐藏为一项作业的串行 MPI 作业 主要提交脚本基本上如下所示 bin bash l PBS l nodes 4 ppn 8 walltime 24 00 00 cat PBS NODEFILE un
  • Java 泛型从类创建数组

    我有一个层次结构 其中正方形 三角形和圆形都从形状延伸 我有一个工作方法 public void someMethod File file new File File with squares ThirdPartyClass foo new
  • Bash 实例未嵌套在 Dockerfile `RUN` 中

    嵌套 bash 实例会递增 SLVL 环境变量 http tldp org LDP abs html internalvariables html http tldp org LDP abs html internalvariables h
  • 如何发布数组多维角度js

    我在 angularjs 中有一个数组 示例如下 scope order qty 20 scope order adress Bekasi scope order city Bekasi 这个数组可以用这个代码发布 http method
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 动态二维数组非连续内存C++

    假设我将二维数组的地址及其二维数组的行和列传递给函数 该函数会将二维数组的地址视为一维数组 例如 int Matrix 如果我执行下面的代码 int arr arr new int row for int i 0 i lt row i ar
  • 数组与列表的性能

    假设您需要一个需要频繁迭代的整数列表 数组 我的意思是非常频繁 原因可能有所不同 但可以说它位于大容量处理的最内层循环的核心 一般来说 人们会选择使用列表 List 因为它们的大小具有灵活性 最重要的是 msdn 文档声称列表在内部使用数组
  • 将数组转换为具有默认值的对象的更简洁方法? (洛达什可用)

    我有一个数组 比如说 a b c 我想将其转换为一个对象 该对象以数组值作为键和我可以设置的默认值 所以如果默认值是true 我希望我的输出是 a true b true c true 下面的代码是否有更简洁的版本来实现此目的 var my
  • 多维数组内的移动

    我有一个用表格显示的数组 如何使用用户输入进行移动 目前 0 被分配给每个数组 但我计划为该数组分配其他值 我的问题是 如何使用用户输入在数组内向上 向下 向右 向左移动和对角移动 Array 0 gt Array 0 gt 0 1 gt

随机推荐