0

我有一个 shell 脚本来自动构建我的程序。我需要将版本号转换V4_5_1-RC14.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
4

2 回答 2

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
于 2013-04-29T13:50:57.787 回答
2

Bash参数扩展可以在没有任何外部工具的情况下做你想做的事情:

NAMEEXT="V4_5_1-RC1"
version=${NAMEEXT#V}     # remove the leading V
version=${version//_/.}  # replace all _ with .
echo $version            # ==> 4.5.1-RC1
于 2013-04-29T14:23:53.820 回答