String 将字符串变量中的$替换为\$

String 将字符串变量中的$替换为\$,string,bash,shell,sed,String,Bash,Shell,Sed,在我的bash脚本中,我有一个带有$签名的字符串变量,它不会被转义。看起来是这样的: x=“你好$world” 显然,当Iecho“$x”时,输出是hello,因为$world被解释为一个变量。我的目标是将字符串修改为hello\$world。我尝试了以下几种技巧。它们似乎都不起作用: y=“$(echo“$x”| sed's/\$/z/g”)”(outputshello) y=“$(echo“$x”|sed's/$/z/g”)”(输出hello z,即使我没有在sed中转义\) 甚至尝试通过以

在我的bash脚本中,我有一个带有
$
签名的字符串变量,它不会被转义。看起来是这样的:

x=“你好$world”

显然,当I
echo“$x”
时,输出是
hello
,因为
$world
被解释为一个变量。我的目标是将字符串修改为
hello\$world
。我尝试了以下几种技巧。它们似乎都不起作用:

y=“$(echo“$x”| sed's/\$/z/g”)”
(outputs
hello

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

甚至尝试通过以下方式替换Bash的本机字符串:

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


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

您可以使用
BASH

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

hello \$world

您可以使用
BASH

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

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

x="hello "
$x
所做的任何操作都不会在其中看到
$
,除非您从外部添加它

也许你的意思是:

x='hello $world'
赋值(带
$world
为空或未定义)与写入相同

x="hello "
$x
所做的任何操作都不会在其中看到
$
,除非您从外部添加它

也许你的意思是:

x='hello $world'

在第二个
sed
命令中,
$
(引用自bash)匹配行尾,因为sed使用基本正则表达式。如何将字符串存储在变量中?如托比的回答所示,
$world
不见了,你无法取回它。将(第一个)
sed
命令与一个引用的
'$x'
命令对比如下:
y=“$(echo'$x'\sed's/\$/z/g')”
。此版本将
$y
设置为
zx
@BenjaminW。我正在使用一个命令(
jq
,具体来说)返回一个字符串,该字符串中有几个未转义的
$
符号。如果您有一个字符串
str
,其中包含一个未转义的
$
,比如
hello$world
(当您发出
declare-p str
时,它的显示方式与此完全相同),执行
echo“$str”
将不会尝试展开变量名。您能显示您的实际赋值吗?在第二个
sed
命令中,
$
(引用自bash)匹配行尾,因为sed使用基本正则表达式。如何将字符串存储在变量中?如托比的回答所示,
$world
不见了,你无法取回它。将(第一个)
sed
命令与一个引用的
'$x'
命令对比如下:
y=“$(echo'$x'\sed's/\$/z/g')”
。此版本将
$y
设置为
zx
@BenjaminW。我正在使用一个命令(
jq
,具体来说)返回一个字符串,该字符串中有几个未转义的
$
符号。如果您有一个字符串
str
,其中包含一个未转义的
$
,比如
hello$world
(当您发出
declare-p str
时,它的显示方式与此完全相同),执行
echo“$str”
将不会尝试展开变量名。你能展示你的实际作业吗?这个问题有
x=“hello$world”
,而不是
x=“hello$world”
(因此问题是,
$x
中没有
$
)。正如你已经知道的,双引号会导致变量扩展,所以我们需要使用单引号。这个问题有
x=“hello$world”
,不是
x='hello$world'
(因此存在问题-在
$x
中没有
$
)。正如您已经知道的,双引号将导致变量扩展,因此我们需要使用单引号。