【发布时间】:2021-10-07 14:28:45
【问题描述】:
考虑以下变量,这些变量是动态的并且每次都可能发生变化。有时甚至可能有5个变量,但所有变量的长度每次都是一样的。
var1='a b c d e... upto z'
var2='1 2 3 4 5... upto 26'
var3='I II III IV V... upto XXVI'
我正在寻找一种通用方法来迭代 for 循环中的变量 & 我想要的输出应该如下所示。
a,1,I
b,2,II
c,3,III
d,4,IV
e,5,V
.
.
goes on upto
z,26,XXVI
如果我使用嵌套循环,那么我会得到所有可能的组合,这不是预期的结果。
另外,我知道如何使用 for 循环和使用下面的链接转移 2 个变量 https://unix.stackexchange.com/questions/390283/how-to-iterate-two-variables-in-a-sh-script
【问题讨论】:
-
在 POSIX shell 中确实没有什么好的方法可以做到这一点。在支持数组的 shell 中,您可以创建 3 个单独的数组并遍历 索引。如果您需要这种“压缩”行为,您可能应该考虑使用不同的语言(具有良好的数据结构支持)。
-
字段是否用空格分隔?如果是,您可以将这些值分配给 bash 索引数组 (
var1=( a b c d e...z )) 并在索引上使用循环。看看this other question也许吧。 -
这能回答你的问题吗? The ever changing variable
-
@AndrejPodzimek:不,与我的要求相比,这太复杂了。粘贴选项为我做了。感谢您的回复!
-
@AdarshR 确实,
paste很好地解决了这个问题,但我认为 Bash 中的“nameref”解决方案也有它的特点——特别是,它更容易扩展到任意数量的变量(并且每个变量只需要一个命令行标记)。我已经 added an answer 表明了我的意思。
标签: bash shell for-loop unix echo