如何增加与bash中数字完成方式类似的字符?
实施例; aaa - > zzz
for i in {aaa..zzz}; do
echo -n $i;
done
应该导致: aaa aab aac(...)zzz zzz zzz
答案 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}})
}