54

-jmake、repoなどのオプションを効率的に使用するためにプラットフォーム上のCPUの数をチェックするbashスクリプトがあります。これを使用します。

JOBS=$(cat /proc/cpuinfo | grep processor | tail -1 | sed "s,^.*:.*\([0-9].*\)$,\1,")
echo -e "4\n$JOBS" | sort -r | tail -1

正常に動作します。しかし、同じことをする(つまり、最小値または最大値を計算する)組み込み関数があるかどうか疑問に思っていますか?

4

2 に答える 2

129

取得する場合は、次MAX(4,$JOBS)を使用してください。

echo $((JOBS>4 ? JOBS : 4))
于 2012-05-02T13:52:07.700 に答える
32

いくつかの変数から最小値を見つけなければならないという同様の状況があり、私が有用だと思った多少異なる解決策はsort

#!/bin/bash

min_number() {
    printf "%s\n" "$@" | sort -g | head -n1
}

v1=3
v2=2
v3=5
v4=1

min="$(min_number $v1 $v2 $v3 $v4)"

これは最も効率的なトリックではないと思いますが、変数の定数が少ない場合は、それほど重要ではありません。また、三項演算子をネストするよりも読みやすくなります。


編集:ニックの素晴らしいコメントを参照してください-このメソッドは、あらゆるタイプのソートの使用法に拡張できます:

#!/bin/bash

min() {
    printf "%s\n" "${@:2}" | sort "$1" | head -n1
}
max() {
    # using sort's -r (reverse) option - using tail instead of head is also possible
    min ${1}r ${@:2}
}

min -g 3 2 5 1
max -g 1.5 5.2 2.5 1.2 5.7
min -h 25M 13G 99K 1098M
max -d "Lorem" "ipsum" "dolor" "sit" "amet"
min -M "OCT" "APR" "SEP" "FEB" "JUL"
于 2014-08-12T15:35:21.953 に答える