unix計算 - 如何在bash中簡單地計算兩個變量的最小值?




shell除法 (2)

如果你想獲得MAX(4,$JOBS) ,請使用:

echo $(($JOBS>4?$JOBS:4))

我有一個bash腳本檢查平台上的CPU數量,以便有效地使用-j選項進行make,repo等。我使用這個:

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

它工作正常。 但是,我想知道是否有任何內置函數執行相同的操作(即計算最小值或最大值)?


有一個類似的情況,我必須找到幾個變量中的最小值,並且我發現有用的一個不同的解決方案是sort

#!/bin/bash

min_number() {
    printf "%s\n" "[email protected]" | 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"




logical-operators