格式化字符串的速度比格式= $(printf ...)更快?

时间:2018-04-04 13:31:52

标签: bash

我有一个变量$ id是一个数字,例如51,我希望这个数字有11位数的基数,如:00000000051。

我试过printf:

format=$(printf "% 011d" $id)

但它极大地减慢了我的程序,除了printf之外还有另一种方法吗?

任何想法?

2 个答案:

答案 0 :(得分:8)

printf并不慢。 $()很慢。在可以避免的时候不要使用它;在这种情况下,避免命令替换要求使用printf -v来传递存储输出的变量的名称。

printf -v format '%011d' "$id"

顺便说一句 - 在ksh93中(与bash不同),value=$(printf ...)会自动优化,直接将结果存储在值中,而不会分支子shell,因此您的原始代码会很快。

答案 1 :(得分:0)

可能不理想,但它有效:

#/bin/bash

id=51
formatted=00000000000$id

# The space before the negation is required
echo ${formatted: -11}