Bash脚本如何接受一位或两位数字并使其成为2位数字

Bash脚本如何接受一位或两位数字并使其成为2位数字

我从我的脚本中提取了以下简单的摘录,该摘录对于特定的输入来说很奇怪。

echo -e "Enter the Day of the Month : \c "
    read input_day
    printf -v input_day '%02d' "$input_day"

这可以确保如果用户输入单个数字(例如 2),那么它会将其转换为 02。这是我的第一个要求。如果输入 2 位数字如 02,这也有效。然后它会将其保留为 02。这也适用于 2 位数字如 12。但奇怪的是,它无法接受数字 08 和 09?这是当输入08或09时给出的错误。

Enter the Day of the Month : 08
2: line 20: printf: 08: invalid number

为什么会这样呢?我尝试阅读 printf 帮助页面,它显示“d”代表有符号十进制整数。所以它应该接受数字 8 和 9。或者我错过了什么?我的要求是用户应该能够输入月份中的某一天作为单位数“8”以及两位数“08”。

答案1

bash会将带有前导零的数字解释为八进制。格式不是问题,$input_day变量才是问题。

您可以使用多种方法删除它们(例如参见awk 相当于 C 中的 LTRIM 函数)。

进一步阅读:

顺便说一句,该示例不检查变量是否为空。但正确验证这一点将是另一个问题。

相关内容