我在 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
它不起作用。
我在 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
它不起作用。
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