判断输入的是整数还是字符串

sh/bash/dash/ksh/zsh等Shell脚本
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 判断输入的是整数还是字符串

#16

帖子 fnan » 2011-07-16 11:15

数学表达式里潜规则是+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
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40

Re: 判断输入的是整数还是字符串

#17

帖子 chengmoYS » 2011-07-18 15:48

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

里面个是字符串赋值 好复杂呀
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 判断输入的是整数还是字符串

#18

帖子 fnan » 2011-07-18 17:16

这几天深度练习正则,越复杂越好 :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?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40

Re: 判断输入的是整数还是字符串

#19

帖子 chengmoYS » 2011-07-19 16:19

我的就是bash 4.1 rhelw6.1能不是bash吗
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 判断输入的是整数还是字符串

#20

帖子 fnan » 2011-07-19 16:55

kose3@kose3-desktop:~$ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
那就奇怪了,ubuntu的更先进?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40

Re: 判断输入的是整数还是字符串

#21

帖子 chengmoYS » 2011-07-20 13:34

[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,就行。
回复