我一直在努力用 sed 定義一個變數值,將值與“6.7”進行比較,然后寫入檔案。
該值是一個版本,因此它始終是 int 或 double。但是我的代碼似乎不起作用:
FILE="user/gradle-6.7-new"
VERSION=$(sed -n '/^distributionUrl=/s/.*gradle-\([^-]*\)-.*/\1/p' $FILE)
if [[ $VERSION > 6.7 ]]
then
$VERSION > /tmp/version_file
fi
謝謝。
uj5u.com熱心網友回復:
awk 可能是一種更簡單的方法。
#!/usr/bin/env bash
FILE="user/gradle-6.7-new"
awk -F- '{version=$2} version >= 6.7 { print version > "/tmp/version_file" }' <<< $FILE
uj5u.com熱心網友回復:
假設:
- OP 的當前代碼正確填充
VERSION(即,我假設 OPVERSION從填充沒有問題$FILE)
我建議您查看@此鏈接的答案。
雖然沒有被選為接受的答案,但這個答案的變體相對簡單,即,讓sort/-V兩個版本字串進行比較,然后相應地測驗輸出的第一行(或最后一行)sort/-V,例如:
testVERSION='6.7'
for VERSION in 6.6 6.7 6.7.0 6.7.1 6.71
do
op='<'
if [[ $(printf "%s\n%s\n" "${testVERSION}" "${VERSION}" | sort -V | head -1) == "${testVERSION}" ]]
then
op='=' # at this point we know ${VERSION} >= ${testVERSION}, but assuming OP needs to distinguish between '>=' and '>' we need one more test ...
[[ "${VERSION}" != "${testVERSION}" ]] && op='>'
fi
echo "${VERSION} ${op} ${testVERSION}"
done
這會產生:
6.6 < 6.7
6.7 = 6.7
6.7.0 > 6.7
6.7.1 > 6.7
6.71 > 6.7
從這里 OP 應該能夠調整邏輯以生成所需的結果,例如:
testVERSION='6.7'
[[ $(printf "%s\n%s\n" "${testVERSION}" "${VERSION}" | sort -V | head -1) == "${testVERSION}" ]] &&
[[ "${VERSION}" != "${testVERSION}" ]] &&
echo "$VERSION" > /tmp/version_file # we get this far if ${VERSION} > ${testVERSION}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/376531.html
上一篇:通過中間帶有“...”的管道列印檔案的前幾行和最后幾行
下一篇:帶有選項的Bashwhile回圈
