以下是我的问题
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
有什么想法吗?
答案 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