在Bash中,如何将一个变量(数字)设置为5位数?

3
如何在bash中排版变量,以便始终填充前导零,如果数字较小。例如,如果我将变量'a'设置为5位数并给出值78,则输出应为00078。
已经有各种回答可用,告诉如何做到这一点,例如使用printf -v a "%05d" 78;等等,但请注意,如果我们这样做,我们只更改输出一次。
例如: printf -v a "%05d" 78 echo $a a=32 echo $a;
输出: 00078 32 这里没有填充
在ksh中,有一个称为typeset的选项,用法如下: typeset -Z5 gen=78; echo $gen; gen=32; echo $gen;
输出: 00072 00032
但是对于bash-Z,typeset选项不可用。一个论坛上的答案声称在bash中使用“declare”而不是“typeset”,但即使在declare中也没有ksh的-Z选项,typeset也不可用。
问题: 是否有任何可行的解决方案,例如我一次设置变量的属性。还是每次都需要调整输出(例如使用printf)?

1
据我所知,这是特定于ksh的。因此,如果你需要它,请使用ksh。或者,你可以定义一个类似于pad() { printf "%05d" $1; }的函数... - clt60
1个回答

2

您可能会执行

a=78
astr=$(printf "%05d" a)
echo $astr

1
你是仔细阅读了问题还是只看了问题的标题就回答了呢? - Kusvii
1
Basile读了它并提供了你的答案,通过否定暗示告诉你每次都需要调整输出。(只需将填充副本分配给一个新变量(或者如果不需要原始未填充形式,则分配给同一变量),然后该变量在其余脚本中保持不变)。例如,a=78; a=(printf "%05d" a);来填充a = 00078。如果您需要保持'a'不变,则为'b =(printf"% 05d"a)'。那里 a=78; b=00078。没有诡计。 - David C. Rankin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接