Python解决重复字符串是一个很轻松的事,比如说a="james",那么要获得"jamesjamesjames"就是"a*3"。


但是这种“*”的字符串乘法在shell里是没有的,比如说“要输出10个a”,还不想用for循环来做,怎么办?


首先都知道如果只是想输出1~10这十个数,是很简单的:

#echo {1..10}就会得到:1 2 3 4 5 6 7 8 9 10

而使用#seq 1 10也可以,只不过这样是竖着的,如果想要是横着的,就的是#seq -s " " 1 10,-s是指定分隔符的意思。

但是如果照葫芦画瓢,#echo "a"{1..10}的话输出的就会是10个a吗?

很可惜,输出结果是a1 a2 a3 a4 a5 a6 a7 a8 a9 a10。跟预期目标有差距,很讨厌。

不过这个方法还是有他的作用的,比如#echo {a,b,c}{1,2,3}

上面的命令会生成以下结果:a1 a2 a3 b1 b2 b3 c1 c2 c3。


#echo a {,,,,,,,,,,},打括号里是十个逗号,那这样效果是什么?

效果就是a a a a a a a a a a。


好像很接近了,但是这样的方法有空格不说,而且要手动打十个逗号,有这个时间我干脆直接打十个a多好,而且要是输出1000个a,我难道还要打1000个逗号吗?


那么就来一个困难的方法吧:

str=$(printf "%-10s" "a")
echo "${str// /a}"

这样的话输出就是10个a了。但是这个参数是什么意思呢?在这里我稍作更改:

str=$(printf "%-5s" "o")
echo "${str// /x0}"

这时候的输出就是ox0x0x0x0,可见str 后面的数字代表重复次数,而后面的单词就是开头。下面的echo输出“x0”就是具体的填充项。大括号里的str//是固定的,中间不能加东西。


这个方法不错,但是也太麻烦了,不好记。


换一个方法,用#printf %.sa {1..10}如何?

输出就是aaaaaaaaaa,没有空格,但是如果想要支持变量的话呢,再试试。

wKiom1c_yZ_CIibGAABIuOApugA002.png


看样子并不支持变量。


如何能支持变量呢?还在找。