我有一个变量$ id是一个数字,例如51,我希望这个数字有11位数的基数,如:00000000051。
我试过printf:
format=$(printf "% 011d" $id)
但它极大地减慢了我的程序,除了printf之外还有另一种方法吗?
任何想法?
答案 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}