在字符串变量中用$替换$

时间:2017-12-21 16:26:39

标签: string bash shell sed

我的bash脚本,我有一个带有$符号的字符串变量,并且它没有被转义。它看起来像这样:

x="hello $world"

显然,当我echo "$x"时,输出为hello,因为$world被解释为变量。我的目标是将字符串修改为hello \$world。我尝试了几种技术,如下所示。他们似乎都没有工作:

y="$(echo "$x" | sed 's/\$/z/g')"(输出hello

y="$(echo "$x" | sed 's/$/z/g')"(输出hello z,即使我没有在sed中转义\

甚至通过以下方式尝试了Bash的原生字符串替换:

y=${x//\$/z}(输出hello

我意识到如果字符串没有存储在变量中,我可以轻松地做任何这些,但是我的脚本工作的方式,这个字符串将首先存储在变量中,所以我需要弄清楚如何添加之后\。如果我创建字符串的新副本或编辑相同的字符串,我不在乎。

2 个答案:

答案 0 :(得分:4)

赋值(peripheral(_:didReadRSSI:error:)为空或未定义)与编写

相同
...
peripheral.setNotifyValue(true, for: characteristicUpdatingEverySecond)
...

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {

    peripheral.readRSSI()
}

func peripheral(_ peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: Error?) {

    print("Peripheral \(peripheral) read RSSI: \(RSSI)")
}

除非您从外部添加$world,否则您对x="hello " 所做的任何操作都不会显示$x

也许你的意思是:

$

答案 1 :(得分:3)

您可以使用BASH

x='hello $world'
echo "${x//\$/\\$}"

hello \$world
相关问题