数学表达式里潜规则是+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
判断输入的是整数还是字符串
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 判断输入的是整数还是字符串
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: 判断输入的是整数还是字符串
我机器上执行如下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
里面个是字符串赋值 好复杂呀
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 判断输入的是整数还是字符串
这几天深度练习正则,越复杂越好
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?

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++强悍,不过可以用。
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: 判断输入的是整数还是字符串
我的就是bash 4.1 rhelw6.1能不是bash吗
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 判断输入的是整数还是字符串
kose3@kose3-desktop:~$ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
那就奇怪了,ubuntu的更先进?
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
那就奇怪了,ubuntu的更先进?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: 判断输入的是整数还是字符串
[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,就行。
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,就行。