5

範囲に対する数値の比較をスクリプト化する方法は?

1 は 2 ~ 5 の範囲外です

また

3 は 2 ~ 5 の範囲内

4

7 に答える 7

19

でさらに良いですPerl6

連鎖比較演算子:

if( 2 <= $x <= 5 ){
}

スマートマッチ演算子:

if( $x ~~ 2..5 ){
}

ジャンクション:

if( $x ~~ any 2..5 ){
}

Given / When 演算子:

given( $x ){
  when 2..5 {
  }
  when 6..10 {
  }
  default{
  }
}
于 2009-02-28T05:44:27.993 に答える
12

パールでは:

if( $x >= lower_limit && $x <= upper_limit ) {
   # $x is in the range
}
else {
   # $x is not in the range
}
于 2009-02-28T04:38:20.600 に答える
11

バッシュの場合:

$ if [[ 1 -gt 2 && 1 -lt 5 ]]; then echo "true"; fi
$ if [[ 3 -gt 2 && 1 -lt 5 ]]; then echo "true"; fi
true
于 2009-02-28T04:42:47.470 に答える
10

スマートマッチ演算子はPerl5.10でも使用できます。

if ( $x ~~ [2..5] ) {
    # do something
}
于 2009-03-01T00:57:59.187 に答える
2

バッシュの場合:

x=9; p="\<$x\>"; if [[ $(echo {10..20}) =~ $p ]]; then echo true; else echo false; fi

以下のコメントに記載されているように、条件を正しく処理するように編集されました。

rangecheck () { local p="\<$1\>"; if [[ $(echo {10..20}) =~ $p ]]; then echo true; else echo false; fi; }
for x in {9..21}; do rangecheck "$x"; done
false
true
.
.
.
true
false
于 2009-04-21T20:27:36.403 に答える
1

testの[[バージョンは、Bash 3.0 以降、正規表現をサポートしています。

[[ 3 =~ ^[2-5]$ ]]; echo $? # 0

入力が数値でない場合、test の数値比較演算子はエラーを返すことがあります。

[[ 1a -ge 1 ]]; echo $? # value too great for base (error token is "1a")
[[ '$0' -le 24 ]] # syntax error: operand expected (error token is "$o")

入力が整数かどうかを次のようにテストできます=~

x=a23; [[ "$x" =~ ^[0-9]+$ && "$x" -ge 1 && "$x" -le 24 ]]; echo $? # 1
x=-23; [[ "$x" =~ ^-?[0-9]+$ && "$x" -ge -100 && "$x" -le -20 ]]; echo $? # 0
于 2012-09-06T10:34:49.717 に答える