我正在运行 Debian 9。在 Bash 中我可以echo {a..z}
输入字母表,或echo {a..z}{a..z}
打印字母组合。但是,我想生成一个索引:a b c d
等然后aa bb cc dd
等然后aaa bbb ccc ddd
等等直到它aaaaa bbbbb
(直到zzzzz
)。如何通过大括号扩展或其他类似方法来完成此操作?谢谢
答案1
你可以这样做:
$ printf '%s ' {a..z}; echo
a b c d e f g h i j k l m n o p q r s t u v w x y z
$ printf '%s%s ' {a..z}{,}; echo
aa bb cc dd ee ff gg hh ... ss tt uu vv ww xx yy zz
$ printf '%s%s%s ' {a..z}{,,}
aaa bbb ccc ddd eee ... ttt uuu vvv www xxx yyy zzz
解释:大括号扩展将为每个由逗号(和前导字符串)分隔的值创建一个参数:
$ echo A{d,u,j}
Ad Au Aj
但是,如果该值为空,它将仅重复前导字符串:
$ echo A{,,}
A A A
如果前导字符串本身是大括号扩展,则其所有字符串都将重复:
$ echo {one,two}{,,}
one one one two two two
然后,使用 printf (和尾随的 echo)来格式化输出:
$ printf '%s%s%s ' {one,two}{,,}; echo
oneoneone twotwotwo
使用一个字母值:
$ printf '%s%s%s ' {a..d}{,,}; echo
aaa bbb ccc ddd
答案2
AFAIK 你不能仅仅通过bash
一些扩展魔法来做到这一点。但你可以随时使用
for c in {a..z}; do echo $c$c; done
for c in {a..z}; do echo $c$c$c; done
...
答案3
这是 Bash 中的另一个选项。
index=$(echo -n {a..z})
num=2
until ((num>5)); do
for c in {a..z}; do
case "$num" in
2 ) index=$(echo -n "$index $c$c") ;;
3 ) index=$(echo -n "$index $c$c$c") ;;
4 ) index=$(echo -n "$index $c$c$c$c") ;;
5 ) index=$(echo -n "$index $c$c$c$c$c") ;;
esac
done
((num++))
done
echo "$index"
- 将第一组添加到
index
. - 剩余四组循环四次。
for
对每个字母运行循环。case
循环中的语句确定for
每个字母添加到索引中的实例数。