在BASH增加aaa到aab

时间:2014-05-01 17:02:57

标签: bash

如何增加与bash中数字完成方式类似的字符?

实施例; aaa - > zzz

for i in {aaa..zzz}; do
    echo -n $i;
done

应该导致: aaa aab aac(...)zzz zzz zzz

4 个答案:

答案 0 :(得分:3)

printf '%s ' {a..z}{a..z}{a..z}

如果你真的想要增加一个角色,你必须跳过一些箍:

首先,你必须获得角色的序数值。这可以使用shell's weird leading-quote syntax

来完成
$ printf -v ordA '%d' '"A'
$ echo "$ordA"
65

接下来,您需要添加一个:

$ ordB=$(( 1 + ordA ))
$ echo "$ordB"
66

然后你需要格式化该值,以便它可以printf作为一个字符:

$ printf -v fmtB '\\x%x' "$ordB"
$ echo "$fmtB"
\x42

然后,你最后printf

$ printf -v chrB "$fmtB"
$ echo "$chrB"
B

呼。我确信其中一些可以简化,但这些是需要采取的实际步骤。

答案 1 :(得分:1)

for n in {a..z}{a..z}{a..z}; do echo -n " $n"; done

答案 2 :(得分:1)

echo {a..z}{a..z}{a..z}

就足够了。

答案 3 :(得分:1)

扩展kojiro对答案的评论,如果你真的想知道如何增加字母字符串(而不是列举所有可能性),这里是一个解决方案(仅限bash,它取决于shell选项{{ 1}})。它只适用于严格按字母顺序排列的小写字符串,但它应该“显而易见”如何扩展它:

extglob

示例:

inc () { 
  local pfx=${1%%[^z]*(z)};
  [[ $pfx != $1 ]] && echo $pfx$(tr a-z b-za <<<${1:${#pfx}})
}