我有一个shell脚本来自动构建我的程序。我需要将V4_5_1-RC1
等版本号转换为4.5.1-RC1
。应删除V
,_
应替换为.
。我尝试了几件事,例如sed:
$NAMEEXT = "V4_5_1-RC1"
$lffNameRSC = ${sed -e "s/V//g" <<< $NAMEEXT}
$lffNameRSC = ${sed -e "s/_/./g" <<< $lffNameRSC}
echo $lffNameRSC
但我收到了错误。
./makerelease.sh: line 113: ${sed -e "s/V//g" <<< $NAMEEXT}: bad substitution
./makerelease.sh: line 114: ${sed -e "s/_/./g" <<< $lffNameRSC}: bad substitution
答案 0 :(得分:5)
=
$(..)
而不是${..}
来评估命令$
使用
#!/bin/bash
NAMEEXT="V4_5_1-RC1"
lffNameRSC=$(sed -e "s/V//g" <<< $NAMEEXT)
lffNameRSC=$(sed -e "s/_/./g" <<< $lffNameRSC)
echo $lffNameRSC
你会得到
4.5.1-RC1
顺便说一句,它可以更轻松,比如
$> echo "V4_5_1-RC1" | sed "s/V//g; s/_/./g"
4.5.1-RC1
答案 1 :(得分:2)
Bash parameter expansion无需任何外部工具即可满足您的需求:
NAMEEXT="V4_5_1-RC1"
version=${NAMEEXT#V} # remove the leading V
version=${version//_/.} # replace all _ with .
echo $version # ==> 4.5.1-RC1