Bash Shell对字母和数字的迭代

时间:2018-10-20 10:03:51

标签: bash shell for-loop scripting

说我想遍历两个字母和数字列表。
A B C Dseq 1 100。 如何遍历字母和数字,但不能像嵌套的for循环中那样遍历?就是A1B2C3D4 A5B6C7D8 ...

到目前为止,我一直在尝试:嵌套的for循环和& done似乎没有任何帮助,因为它们会产生A1 B1 C1 D1 A2 B2...或并行执行不一致的结果。

这也感觉像是一个非常基本的并行循环,因此不需要详细的说明或实际代码:任何提及文档链接或此类序列的常规名称的答案都会被接受。< / p>

2 个答案:

答案 0 :(得分:1)

以下脚本以空格开头生成您的预期输出:

脚本

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 Dyes是一个无限制地重复其参数的命令。 yes x版画

x
x
x
...

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

 A
B
C
D
 A
B
...

我们希望稍后再使用文本,而不是打印到控制台。为此,我们可以编写yes ... | someCommandsomeCommand < <(yes ...),它们比管道有一些优势。后者称为process substitution。请注意,for ...; done只是一个命令。可以从for循环内的任何位置读取重定向的stdin。

答案 1 :(得分:0)

#!/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