分页: 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
这几天深度练习正则,越复杂越好 :em04
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,就行。