String 将字符串变量中的$替换为\$
在我的bash脚本中,我有一个带有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中转义\) 甚至尝试通过以
$
签名的字符串变量,它不会被转义。看起来是这样的:
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的本机字符串:
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
中没有$
)。正如您已经知道的,双引号将导致变量扩展,因此我们需要使用单引号。