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

问题描述 投票:1回答:2

我的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

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

string bash shell sed
2个回答
4
投票

赋值($world为空或未定义)与写入相同

x="hello "

你对$x所做的一切都不会在那里看到$,除非你从外面添加它。

也许你的意思是:

x='hello $world'

3
投票

你可以使用BASH

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

hello \$world
© www.soinside.com 2019 - 2024. All rights reserved.