分页: 2 / 2
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-16 11:15
由 fnan
数学表达式里潜规则是+12这类返回错误。
while read i;do : ${i:=a};[ ${i##?(?(-|+)[1-9]*([0-9]))?(0)} ] && echo No || echo Yes;done
12
Yes
-12
Yes
012
No
-012
No
102
Yes
+12
Yes
+012
No
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-18 15:48
由 chengmoYS
fnan 写了:数学表达式里潜规则是+12这类返回错误。
while read i;do : ${i:=a};[ ${i##?(?(-|+)[1-9]*([0-9]))?(0)} ] && echo No || echo Yes;done
12
Yes
-12
Yes
012
No
-012
No
102
Yes
+12
Yes
+012
No
我机器上执行如下
[user@localhost ~]$ while read i;do : ${i:=a};[ ${i##?(?(-|+)[1-9]*([0-9]))?(0)} ] && echo No || echo Yes;done
0
No
1
No
01
No
+1
No
+01
No
-1
No
-01
No
while read i;
do
: ${i:=a};
[ ${i##?(?(-|+)[1-9]*([0-9]))?(0)} ] && echo No || echo Yes;
done
里面个是字符串赋值 好复杂呀
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-18 17:16
由 fnan
这几天深度练习正则,越复杂越好
kose5@kose5-Aspire-4552:~$ while read i;do : ${i:=a};[ ${i##?(?(-|+)[1-9]*([0-9]))?(0)} ] && echo No || echo Yes;done
0
Yes
1
Yes
01
No
+1
Yes
+01
No
-1
Yes
-01
No
0
Yes
00
No
你的shell可能不是bash?
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-19 16:19
由 chengmoYS
我的就是bash 4.1 rhelw6.1能不是bash吗
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-19 16:55
由 fnan
kose3@kose3-desktop:~$ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
那就奇怪了,ubuntu的更先进?
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-20 13:34
由 chengmoYS
[root@localhost ~]# bash --version
bash --version
GNU bash, version 4.1.2(1)-release (i386-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <
http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
[root@localhost ~]#
如果man expr发现当expr EXPRESSION中EXPRESSION如果是数学运算表达式,那么可以用于测试输入是否为整数,
因为该EXPRESSION语法规定在EXPRESSION中参与运算的必须是整数,否则语法错误,所以expr $i + 0 > /dev/null 2>&1的返回值不为2,就行。