Shell 有两个值的脚本变量赋值(正则表达式)

Shell script variable assignment with two values (regular expression)

我正在尝试设置一个具有两个值的变量。这是一个例子:

letter='[[:alpha:]]'
digit='[[:digit:]]'

integer='$digit'
float='$digit.$digit'

整数变量必须出现一次或多次。变量 float 应显示第一个字段(点之前) 或更多次。我该怎么做?

感谢帮助!

-- 更新--

能得到大家的支持真是太好了。下面是为我服务的解决方案:

letter='[[:alpha:]]'
digit='[[:digit:]]'

integer="${digit}+"
float="[0-9]*\.[0-9]+"

谢谢大家! :D

我没有研究过 bash 的 expr 命令(我假设你正在使用)来验证他们使用的是哪种正则表达式,所以你可能需要做一些类似 [a-zA-Z] 而不是 [[:alpha:]] 和类似的替换。但假设您在 letterdigit 中选择了正确的值,那么这应该有效:

expr match "$string" "(${digit}*.${digit}*)"

或者,使用您的 float 变量:

float="(${digit}*.${digit}*)"
expr match "$string" "$float"

如果您只想使用 return 值而不是 return 匹配的实际值,请删除括号。

以下任何一个都是整数的等价正则表达式:

integer="(${digit}+)"
integer="(${digit}{1,})"
integer="(${digit}${digit}*)"

请注意正则表达式有不同的 "flavors",在不同的上下文中需要转义,而在另一个上下文中则不需要。

对于 bash 命令行上的 egrep 和 grep -E:

float: [0-9]*\.[0-9]+
integer: [0-9]+

请参阅 http://www.cyberciti.biz/faq/grep-regular-expressions/ 处的 egrep regxes 图表以获取一些提示,但需要针对特定​​情况进行测试

对于 perl 和 java:

float: [0-9]*?\.[0-9]+?
integer: [0-9]+?
+ matches preceding char or char class >= 1 times
* matches preceding char or char class >= 0 times
. matches any char
\. matches an uninterpreted period 
[0-9] matches the class of any digit
? forces reluctant (non-greedy) matching