bash:替换。用\。在变量中

时间:2014-08-05 23:41:41

标签: regex bash sed environment-variables

以下是我的问题

RELEASE_BRANCH=5.2.2

echo $RELEASE_BRANCH | sed 's/\./\\./g'
5\.2\.2

RELEASE=`echo $RELEASE_BRANCH|sed 's/\./\\./g'`

echo $RELEASE
5.2.2

我期待什么

echo $RELEASE
5\.2\.2

有什么想法吗?

5 个答案:

答案 0 :(得分:5)

不推荐使用back-ticks。您应该使用command substitution代替。

#!/bin/bash

RELEASE_BRANCH=5.2.2
RELEASE=$(echo $RELEASE_BRANCH|sed 's/\./\\./g')

echo "$RELEASE"

注意:有关更多详细信息,请阅读link中的重要差异(项目符号1)。

答案 1 :(得分:1)

如果我理解你,那么这应该会给你预期的结果 -

$ RELEASE=$(echo $RELEASE_BRANCH|sed 's/\./\\./g')
$ echo $RELEASE
5\.2\.2

答案 2 :(得分:1)

由于您正在使用反引号,因此需要额外延长反斜杠:

RELEASE=`echo $RELEASE_BRANCH|sed 's/\\./\\\\./g'`

答案 3 :(得分:1)

您也使用此方法,

$RELEASE=`echo $RELEASE_BRANCH|sed -r 's/\./\\\&/g'`
$echo $RELEASE
 5\.2\.2

答案 4 :(得分:1)

我们很少考虑 bash 提供的强大的字符串操作功能,在这种情况下,以下效果非常好:

  

$ {串/串/更换}

Replace first match of $substring with $replacement.
     

$ {//串子/更换}

Replace all matches of $substring with $replacement.

所以在这里我们将使用第二个版本,以获得一个整洁的单行:

$ RELEASE_BRANCH=5.2.2
$ echo ${RELEASE_BRANCH//./\\.}
5\.2\.2