如何在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)?
已经有各种回答可用,告诉如何做到这一点,例如使用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)?
ksh
的。因此,如果你需要它,请使用ksh
。或者,你可以定义一个类似于pad() { printf "%05d" $1; }
的函数... - clt60