在 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 bar
和1 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 - 压缩多个文件,从变量中获取参数,其中一个在名称中有空格[重复]