在 bash 中,是不是可以将多个数组放在引号内然后访问它们?

Posted

技术标签:

【中文标题】在 bash 中,是不是可以将多个数组放在引号内然后访问它们?【英文标题】:In bash, is it possible to put several arrays inside quotes and then access them?在 bash 中,是否可以将多个数组放在引号内然后访问它们? 【发布时间】:2013-11-24 00:57:13 【问题描述】:

我知道我可以做到:

set=("1 2 3" "4 5 6")
for subset in "$set[@]"
do
for element in $subset
do
echo $element
done
done

1 2 3 4 5 6 将按顺序打印。但是,我不能这样做:

  set="(1 2 3) (4 5 6)"
  for subset in $set
  do
  echo $subset[2]
  done

我想打印 3 6. 我想这样做的原因是我想在迭代期间访问我想访问的任何元素,而不是一个一个地迭代。这就是为什么我尝试将数组放在引号内,而不是将引号放在大数组内。有没有办法做到这一点? 谢谢,

【问题讨论】:

正如在下面的答案中所说,bash 不支持多维数组。如果您可以重新考虑您的设计以便不需要此功能,请这样做。如果您绝对需要多维数组,请使用支持它们的语言(Perl、Python 等) bash 数组不适用于构建复杂的数据结构;它们是第二级引用,用于存储必须引用的命令行参数。示例:a=("foo bar" "1 2 3"); some_command "$a[@]",它为some_command 提供了两个参数:foo bar1 2 3 【参考方案1】:

不幸的是,我认为 bash 不支持多维数组,这听起来像是您正在寻找的。您可以在 bash 本身的帮助下模拟它,如下所示:

x=()
x+=("1,2,3")
x+=("4,5,6")

for val in $x[@]; do
    subset=($(echo $val | tr ',' ' '))
    echo $subset[2]
done

【讨论】:

以上是关于在 bash 中,是不是可以将多个数组放在引号内然后访问它们?的主要内容,如果未能解决你的问题,请参考以下文章

bash - 压缩多个文件,从变量中获取参数,其中一个在名称中有空格[重复]

单引号是不是将反斜杠视为 bash 脚本中的特殊字符?

linux shell 命令定义和使用数组出错

如何迭代 Bash 脚本中的参数

如何删除多余的双引号,而不是使用bash脚本在一行文本中打开和关闭双引号

在 Bash 中包含多个带引号的 args 的变量