1

我在 bash 中有以下代码:

if  [[ $a =~ ^[+-]?([0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+)([DdEeQ][+-]?[0-9]+)?$ ]]; then

我怎样才能在 tcsh 中做到这一点?我试过了:

if  ( $a =~ {^[+-]?{[0-9]+\.?[0-9]*\|[0-9]*\.?[0-9]+}{[DdEeQ][+-]?[0-9]+}?\$} ) then

它不起作用。

4

1 回答 1

2

bash 本身支持正则表达式,显然不是 tcsh。可以使用 expr 命令代替;以下测试表明 | ( ) ? 和 + 必须被转义才能不被字面理解(例如与 perl 相反)。

去测试 :

expr a : '\(a\|b\)'
expr b : 'a\?b'
expr aab : 'a\+b'

expr "$a" : '^[+-]\?\([0-9]\+\.\?[0-9]*\|[0-9]*\.\?[0-9]\+\)\([DdEeQ][+-]\?[0-9]\+\)\?$'

或者

pattern='^[+-]\?\([0-9]\+\.\?[0-9]*\|[0-9]*\.\?[0-9]\+\)\([DdEeQ][+-]\?[0-9]\+\)\?$'
if expr "$a" : "$pattern" >/dev/null; then
    ..
fi
于 2012-10-28T12:46:07.503 回答