确保int变量长度为2位,否则在前面加0以使其长2位

时间:2009-12-14 03:11:55

标签: linux bash shell integer

如何检查int变量($ inputNo)以查看它是否是2位或更多位十进制数?

示例:

inputNo="5"

应更改为:05

inputNo="102"

应该保持独立:102

我考虑使用wcif语句,但wc -m似乎并未将实际字符传递到wc,因为wc始终如此似乎给出了给出的字符+1。

但我不知道如何在当前输入数字前添加0。

3 个答案:

答案 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})"