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
我想过使用wc和if语句,但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)
这基本上是你在你的问题中想到的,但请注意-n在echo命令中使用以防止尾随换行(这几乎肯定会导致你的一个错误).
但是,正如所述,这是一个后退的立场.如果你正在使用bash,我早期的建议可能是最好的.
对于通用填充,字符串是否为数字
无需管道echo进入wc或使用while循环.
在Bash中,你可以得到这样一个字符串的长度:${#inputNo}.
既然你可以做子串,你可以这样做:
if [[ ${#input} < 2 ]]
then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40301 次 |
| 最近记录: |