是for循环还是printf序列更适合创建n个字符的字符串



选择一种方法而不是另一种方法的原因是什么?

for sp in {1..1000}; do str=$str' '; done

printf -v str ' %0.s' {1..1000}

查看我的系统(macOS 10.15.6,bash 5.1 alpha(上的时差:

$ time { str=; for sp in {1..1000}; do str=$str' '; done; }
real    0m0.015s
user    0m0.015s
sys     0m0.000s
$ time { str=; for sp in {1..1000}; do str=$str' '; done; }
real    0m0.014s
user    0m0.014s
sys     0m0.000s
$ time { str=; for sp in {1..1000}; do str=$str' '; done; }
real    0m0.015s
user    0m0.014s
sys     0m0.000s
$
$ time { printf -v str ' %0.s' {1..1000}; }
real    0m0.005s
user    0m0.005s
sys     0m0.000s
$ time { printf -v str ' %0.s' {1..1000}; }
real    0m0.003s
user    0m0.003s
sys     0m0.000s
$ time { printf -v str ' %0.s' {1..1000}; }
real    0m0.004s
user    0m0.004s
sys     0m0.000s
$

对于这个特定的目的,printf -v str '%*s' 1000 ''甚至更快:

$ time { printf -v str '%*s' 1000 ''; }
real    0m0.000s
user    0m0.000s
sys     0m0.000s
$ time { printf -v str '%*s' 1000 ''; }
real    0m0.000s
user    0m0.000s
sys     0m0.000s
$

如果时间表现对你来说并不重要,那就选你喜欢的人吧。

最新更新