2013-04-29 51 views
0

我有一個外殼腳本來自動構建我的程序。我需要將版本號如V4_5_1-RC1轉換爲4.5.1-RC1V應該被刪除,_應該被.替換。我嘗試了幾件事情,例如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 
+2

'$(...)'執行它的命令,而不是'$ {..}' – Kent 2013-04-29 13:50:39

回答

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 
+0

很好的答案。 +1 – Kent 2013-04-29 13:55:56

+0

謝謝!它已經有一段時間了,因爲我正在接觸shell腳本 – mles 2013-04-29 13:56:53

+0

很好的答案!變量的名字應該更有意義。 – znlyj 2013-04-29 13:59:30

2

猛砸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