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 に答える