簡體   English   中英

bash:替換。 與\\。 在變量中

[英]bash: replace . with \. in a variable

以下是我的問題

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

有任何想法嗎?

不建議使用引號。 您應該改為使用命令替換

#!/bin/bash

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

echo "$RELEASE"

注意:請閱讀從重要差異(子彈1) 聯系了解更多詳情。

如果我了解您,那么您應該會得到預期的結果-

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

由於您使用的是反引號,因此您需要多花一次轉義反斜杠:

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

您也使用此方法,

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

我們很少考慮bash提供的強大的字符串操作功能,在這種情況下,以下功能非常有效:

$ {string / substring / replacement}

 Replace first match of $substring with $replacement. 

$ {string // substring / replacement}

 Replace all matches of $substring with $replacement. 

因此,在這里我們將使用第二個版本,以實現簡潔的單線:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM