【发布时间】:2018-07-19 10:10:31
【问题描述】:
在我的 Mac High Sierra 的终端中使用 Bash。
所以这个代码应该确保一个三位数的数字。我用 printf 做到了这一点。我创建了 bash 文件。这将接受一个数字,然后将其转换为三位数并打印。但它做了一些奇怪的事情,我想知道为什么。
如果您输入正常的数字 1、2、3,... 一切正常。 如果您输入三位数字 001 ... 007 一切正常。
例子:
- 输入 1 输出 001。
- 输入 04 输出 004。
- 输入 005 输出 005。
到目前为止一切顺利。
这就是奇怪的地方。
- 如果我输入 008,那么它会输出 000。
- 如果我输入 009,那么它会输出 000。
- 如果我输入 010,那么它会输出 008。
- 如果我输入 019,那么它会输出 000。
- 如果我输入 030,那么它会输出 024。
number=$1
digit=$(printf "%03d" $number)
echo num: $number
echo digit: $digit
【问题讨论】:
-
number=$(( 10#$1 ))强制解释为十进制 -
指定使用十进制::
digit=$(printf "%03d" "10#$number") -
运行
printf -v digit "%03d" "10#$number"效率更高——没有子shell。digit=$(printf ...)中的子shell 在(真正的 David Korn)ksh 中进行了优化,但不是 bash。