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