如何检查int变量($ inputNo)以查看它是否是2位或更多位十进制数?
示例:
inputNo="5"
应更改为:05
inputNo="102"
应该保持独立:102
我考虑使用wc
和if
语句,但wc -m
似乎并未将实际字符传递到wc
,因为wc
始终如此似乎给出了给出的字符+1。
但我不知道如何在当前输入数字前添加0。
答案 0 :(得分:32)
您可以使用带有printf
选项的bash-builtin -v
将其写入变量,而不是将其打印到标准输出:
pax> inputNo=5 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
05
pax> inputNo=102 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
102
您需要先确保它是数字,否则转换将失败。如果您希望能够将任何字符串填充为两个或更多字符,您还可以使用:
while [[ ${#inputNo} -lt 2 ]] ; do
inputNo="0${inputNo}"
done
基本上是一个while
循环,在字符串前面加上“0”,直到长度大于或等于2。
请注意,这也可以在bash
中通过在数字前加两个零来完成,然后只需获取该字符串的最后两个字符,首先检查它是否至少不是所需的大小:
if [[ ${#inputNo} -lt 2 ]] ; then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
两位数的差异可能不是太大,但如果您需要更大的宽度,您可能会发现后一种解决方案更好。
如果你使用的是其他而不是bash
(不太可能,基于你的标签),你需要找到等价物,或者恢复使用外部进程来做工作,如:
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
这基本上是你在你的问题中想到的,但请注意在-n
命令中使用echo
来防止尾随换行符(这几乎肯定会导致你的一个错误)。
但是,如上所述,这是一个后退的立场。如果你正在使用bash
,我之前的建议可能是最好的。
答案 1 :(得分:7)
对于通用填充,字符串是否为数字
无需将echo
加入wc
或使用while
循环。
在Bash中,您可以获得如下字符串的长度:${#inputNo}
。
既然你可以做子串,你可以这样做:
if [[ ${#input} < 2 ]]
then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
答案 2 :(得分:1)
您可以使用http://bash-hackers.org/wiki/doku.php/commands/builtin/printf,例如:
the_mac="0:13:ce:7:7a:ad"
# lowercase hex digits
the_mac="$(printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${the_mac//:/ 0x})"
# or the uppercase-digits variant
the_mac="$(printf "%02X:%02X:%02X:%02X:%02X:%02X" 0x${the_mac//:/ 0x})"