打印包含反斜杠的变量

Cak*_*ake 2 bash echo escape-characters printf

我有这样的事情:

A=$(curl https://mysite.com)
Run Code Online (Sandbox Code Playgroud)

并且curl请求返回字符串\"Hello World\"。当我现在想A使用以下之一打印到控制台时:

echo "$A"
printf '%s' "$A"
Run Code Online (Sandbox Code Playgroud)

消失\了,它只是说"Hello World"。我该怎么做才能进入\"Hello World\"控制台?

Sté*_*las 5

如果printf '%s' "$A"没有显示任何反斜杠,那么它们就不存在。你可以单独检查一下curl https://mysite.com

也许您对以下输出感到困惑:

bash-5.0$ typeset -p A
declare -- A="\"Hello World\""
Run Code Online (Sandbox Code Playgroud)

这是 bash 输出的 shell 代码,可用于定义该$A变量。在 shell 语言的语法中, 是\用来转义以下内容的",以告诉 shell 这"是数据的一部分,而不是结束引号。

它还可以有输出:

declare -- A='"Hello World"'
Run Code Online (Sandbox Code Playgroud)

其作用是一样的(而且更安全)。OrA=\"Hello\ World\"$'"Hello World"'等是 shell 语言语法中的其他引用形式。