我正在尝试使用bash从十进制数中减去。
例如:如果我有一个数字1.0.0.55,我想减去得到1.0.0.54。
以下是我目前的记录:
#!/bin/bash
LATEST_RELEASE="myproduct_1.0.0.55"
RELEASE_NUMBER=`echo $LATEST_RELEASE | sed 's/[^0-9.]//g'`
echo $RELEASE_NUMBER
#this only works with whole numbers (i.e. 10055)
PREVIOUS_RELEASE=$(($RELEASE_NUMBER - 1))
echo $PREVIOUS_RELEASE
#EOF
任何帮助将不胜感激!
谢谢!
与bash
及其参数展开:
latest_release="myproduct_1.0.0.55"
first="${latest_release%.*}"
declare -i last # set integer flag
last="${latest_release##*.}"-1
previous_release="$first.$last"
echo "$previous_release"
输出:
<>以前myproduct_1.0.0.54您需要隔离想要从中提取1
的字符串部分,因为您不能从字符串1.0.0.55
中减去1
。
考虑在这里使用awk:
echo '1.0.0.55' | awk 'BEGIN{FS=OFS="."}{$4=$4-1}1'
"myproduct_1.0.0.54"
不是一个数字,所以我们不能轻易地把它减去1。
我将使用参数扩展(${parameter:-word}
)来获得最后一个.
之后的部分,并在数字上使用它,以便我们可以+ 1
。
然后获取最后一个点之前的所有内容以再次连接字符串:
#!/bin/bash
input="myproduct_1.0.0.55"
minus=$((${input##*.} - 1))
echo "${input%.*}.${minus}"
会产生:
myproduct_1.0.0.54