我从脚本中得到以下简单摘录,奇怪地将其提取为特定的输入。
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”作为月份。
bash
会将前导零的数字解释为八进制。格式不是问题,$input_day
变量是问题。
您可以使用多种方法删除它们(例如,参见C中与LTRIM函数相当的awk)。
进一步阅读:
在将变量传递给iptables之前,删除前导零
使用以下语法$((10#$machinenumber))
:
printf -v input_day '%02d' "$((10#$input_day))"
重击:从变量中删除前导零
更是关键所在:
shopt -s extglob printf -v input_day '%02d' ${input_day##+(0)}
顺便说一句,该示例不检查变量是否为空。但是正确验证这一点将是另一个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句