字母和数字上的bashshell迭代

字母和数字上的bashshell迭代,bash,shell,for-loop,scripting,Bash,Shell,For Loop,Scripting,假设我想迭代两个字母和数字列表。 A B C D和序列1100。 如何迭代字母和数字,而不是嵌套for循环?所以它应该是A1B2C3D4 A5B6C7D8… 到目前为止,我所尝试的:嵌套for循环和&done似乎没有任何帮助,因为它们会产生a1b1c1d1a2b2…或不一致的并行执行结果 而且它感觉像是一个非常基本的并行循环,因此不需要详细的解释或实际的代码:任何提及文档链接或此类序列的常规名称的答案都将立即被接受。以下脚本使用前导空格生成预期输出: 脚本 for i in {1..100};

假设我想迭代两个字母和数字列表。
A B C D
序列1100
。 如何迭代字母和数字,而不是嵌套for循环?所以它应该是
A1B2C3D4 A5B6C7D8…

到目前为止,我所尝试的:嵌套for循环和
&done
似乎没有任何帮助,因为它们会产生
a1b1c1d1a2b2…
或不一致的并行执行结果


而且它感觉像是一个非常基本的并行循环,因此不需要详细的解释或实际的代码:任何提及文档链接或此类序列的常规名称的答案都将立即被接受。

以下脚本使用前导空格生成预期输出:

脚本

for i in {1..100}; do
    IFS= read c
    printf %s "$c$i"
done < <(yes $' A\nB\nC\n\D')
 A1B2C3D4 A5B6C7D8 A9B10C11D12 A13B14C15D16 A17B18C19D20 A21B22C23D24 A25B26C27D28 A29B30C31D32 A33B34C35D36 A37B38C39D40 A41B42C43D44 A45B46C47D48 A49B50C51D52 A53B54C55D56 A57B58C59D60 A61B62C63D64 A65B66C67D68 A69B70C71D72 A73B74C75D76 A77B78C79D80 A81B82C83D84 A85B86C87D88 A89B90C91D92 A93B94C95D96 A97B98C99D100
解释

要读取序列<代码>1 2 3。。。100在其全长中,我们需要反复重复序列
A B C D
yes
是一个无限重复其参数的命令<代码>是x打印

x
x
x
...
为了让
yes
在每行中打印不同的内容,我们使用了一个技巧
$'A\nB\nC\nD'
是包含换行符的字符串(
$'
是所谓的bash ansi-c引号)<代码>是$'A\nB\nC\nD'将打印

 A
B
C
D
 A
B
...

我们希望以后使用文本,而不是打印到控制台。为此,我们可以写
yes…|someCommand
someCommand<您尝试解决了什么问题?@hek2mgl感谢您提出的问题,我尝试了循环和
&完成了
,但未能达到预期的结果。最好是显示您的代码,而不是Z25。只有A,B,C,D。如果它在A-D上循环,并且没有打破数字循环,那么它正是我需要的<代码>A1B2C3D4 A5B6C7D8…
等等。这就是我需要的!你能描述一下这部分的基本功能吗?很高兴听到这个消息。我会补充一个解释。请稍等,你就是那个人!尽管新手发帖有很多障碍,但在这里有这样的人,他们的答案写得很好,也很简洁。再次感谢!只是好奇:编程中有没有这种循环的传统名称?我不知道。也许在函数编程中,如果将两个序列都看作流,则循环将被ZIP或合并操作所取代——这是一种基于两个其他流计算一个流的操作。最接近bash的是
paste
命令以及一些后续操作。对于未来的个人来说,如果这个答案能解释为什么它会起作用,那就太好了。@KevinO认真地说?我评论了每一行。什么没有解释?是的,说真的。为什么模可以用来回答这个问题。显然,循环已经被注释了,但是解决问题的主要逻辑没有被解释。如果有人不理解模运算符是如何工作的,那么我不妨假设他根本不知道如何编程。
#!/bin/bash

# ASCII code for A
A=65

# Loop from 1 to 100
for ii in $( seq 1 100 )
do
    # Compute ASCII code with using modulo
    code=$(( (ii-1) % 4 + A ))

    # Print letter
    printf "\x$(printf %x $code)"

    # Print number
    echo $ii
done