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

Min*_*int 16 linux bash shell integer

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

例:

inputNo="5"
Run Code Online (Sandbox Code Playgroud)

应改为:05

inputNo="102"
Run Code Online (Sandbox Code Playgroud)

应该独处:102

我想过使用wcif语句,但wc -m似乎没有给出传入的实际字符wc,因为wc似乎总是给出给出的字符+1.

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

pax*_*blo 33

您可以使用printf带有-v选项的bash-builtin 将其写入变量,而不是将其打印到标准输出:

pax> inputNo=5   ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
05
pax> inputNo=102 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
102
Run Code Online (Sandbox Code Playgroud)

您需要先确保它是数字,否则转换将失败.如果您希望能够将任何字符串填充为两个或更多字符,您还可以使用:

while [[ ${#inputNo} -lt 2 ]] ; do
    inputNo="0${inputNo}"
done
Run Code Online (Sandbox Code Playgroud)

这基本上是一个while循环,在字符串前面加上"0",直到长度大于或等于2.

请注意,这也可以bash通过在数字前加两个零来完成,然后简单地获取该字符串的最后两个字符,首先检查它是否至少不是所需的大小:

if [[ ${#inputNo} -lt 2 ]] ; then
    inputNo="00${inputNo}"
    inputNo="${inputNo: -2}"
fi
Run Code Online (Sandbox Code Playgroud)

对于两位数的数字,差异可能不是太大,但如果您需要更大的宽度,您可能会发现后一种解决方案更好.


如果您使用的是壳bash(不可能的,根据你的标签),你需要找到等价物,或恢复到使用外部程序做的工作,是这样的:

while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
    inputNo="0${inputNo}"
done
Run Code Online (Sandbox Code Playgroud)

这基本上是你在你的问题中想到的,但请注意-necho命令中使用以防止尾随换行(这几乎肯定会导致你的一个错误).

但是,正如所述,这是一个后退的立场.如果你正在使用bash,我早期的建议可能是最好的.


Pau*_*ce. 7

对于通用填充,字符串是否为数字

无需管道echo进入wc或使用while循环.

在Bash中,你可以得到这样一个字符串的长度:${#inputNo}.

既然你可以做子串,你可以这样做:

if [[ ${#input} < 2 ]] 
then
    inputNo="00${inputNo}"
    inputNo="${inputNo: -2}"
fi
Run Code Online (Sandbox Code Playgroud)