1
202
你可以通过 多个数组作为参数 使用类似的方法:
回声:
|
2
82
注: 这是我自己发布的有点粗糙的解决方案,在这里没有找到关于堆栈溢出的答案。它只允许传递一个数组,并且它是参数列表的最后一个元素。实际上,它根本不是传递数组,而是一个元素列表,它的元素被称为_Function()重新组合到数组中,但它对我有效。后来肯公布了他的解决方案,但我把我的保留在这里作为“历史性”参考。
由彭赛改进,谢谢。 |
3
35
评论Ken Bertelson解决方案并回答Jan Hettich: 它是如何工作的
这个
N.B.:
值得一提的是,使用此括号形式的数组初始化将根据
我用它预订的
在
既然如此,为什么不直接看看这些变量本身呢?就像在那里写:
见上述解释,仅复制
综上所述
我还想强调丹尼斯·威廉姆森在上面的评论: 稀疏的 数组(没有所有键定义的数组-其中有“孔”)将无法按预期工作-我们将释放键并“压缩”数组。 也就是说,我确实看到了泛化的值,因此函数可以在不知道名称的情况下获取数组(或副本):
然后循环使用它们创建一个副本。
注:这里
|
4
19
这里的基本问题是设计/实现数组的bash开发人员真的搞砸了pooch。他们决定
分配数组的形式为
因此,
然后,将数组按值传递给函数,并将一个数组分配给另一个数组,这将按照shell语法的其余部分指示工作。但因为他们做得不好,分配操作员
因此,如果操作正确,那么下面的示例将展示如何在bash中更好地利用数组:
结果输出应为:
然后,数组可以使用赋值运算符,并按值传递给函数甚至其他shell脚本。通过输出到文件轻松存储,并轻松从文件加载到脚本中。
唉,我们已经被一个原本最高级的bash开发团队失望了。 因此,要将数组传递给函数,实际上只有一个选项,即使用nameref功能:
将产生以下输出:
因为这是通过引用传递的,所以您还可以在函数中为数组赋值。是的,被引用的数组必须有一个全局范围,但考虑到这是shell脚本,这不应该太大。要按值将关联或稀疏索引数组传递给函数,需要将所有索引和值作为单个字符串(如果是大数组,则不太有用),如下所示:
然后在函数内部编写一组代码来重新组合数组。 |
5
5
Devsolar的答案有一点我不理解(也许他有一个具体的理由这样做,但我想不出一个):他从位置参数一个元素一个元素地设置阵列,迭代。 一个更容易接近的方法是
|
6
3
例子
|
7
2
传递多个数组作为参数的一种简单方法是使用一个字符分隔的字符串。您可以这样调用脚本:
然后,您可以像这样在代码中提取它:
这样,实际上可以将多个数组作为参数传递,而不必最后一个参数。 |
8
1
这一个甚至适用于空间:
|
9
1
通过一些技巧,您实际上可以将命名参数连同数组一起传递给函数。 我开发的方法允许您访问传递给如下函数的参数:
换句话说,不仅可以通过参数的名称来调用参数(这就构成了一个更可读的核心),还可以实际传递数组(以及对变量的引用——这个特性只在bash 4.3中有效)!另外,映射的变量都在本地范围内,就像$1(和其他变量)一样。 使这项工作的代码非常简单,可以在bash 3和bash 4中工作(这是我测试过的唯一版本)。如果你对更多这样的技巧感兴趣,使bash的开发变得更好和更容易,你可以看看我的 Bash Infinity Framework ,下面的代码是为此目的而开发的。
|
10
1
只是为了增加已接受的答案,因为我发现,如果数组内容如下所示,它就不能很好地工作:
在这种情况下,数组的每个成员都被拆分,因此函数看到的数组等同于:
为了使这个例子正常工作,我发现的方法是将变量名传递给函数,然后使用eval:
只是我的2盎司 |
11
1
虽然很难看,但这里有一个解决方法,只要您不显式传递数组,而是传递与数组对应的变量:
我相信有人能想出一个更清晰的想法实现,但我发现这比将数组作为
一个纯粹主义者的观点可能认为这种方法违反了语言,但从实用主义的角度来说,这种方法让我省下了很多痛苦。在相关主题上,我也使用
希望这能帮助别人。 |
12
0
要求
:函数在数组中查找字符串。
|
Batavia · Bash-删除大目录中的文件 1 年前 |
stackbiz · 如何在bash中将所有换行符替换为“\n” 1 年前 |
Paul · Bash wait命令忽略指定的进程ID 2 年前 |