在 Unix 中转义特殊字符 shell

Escaping special characters in Unix shell

据说 " " , ' ' , \ 转义特殊字符 a.k.a 它们的特殊含义,但是当我这样做时

date +"Today is \%A"

它不会写 "Today is %A" 但它会写出相同的结果,因为没有“\” = "Today is thurstday"。为什么会这样?我以为我理解 unix 中的转义字符是如何工作的,但这让我很困惑

我在 /bin/bash/ 上将其输入终端 im(这就是 $SHELL 的输出),奇怪的是,如果 \ 没有在日期中转义字符,则使用 ssh 连接到服务器和 运行 那里的命令与转义一起工作,例如

ssh name@server.com 'date +"Today is %A"'

转义特殊字符一般在shell。例如,在 bash 我得到:

Today is \Wednesday

这是因为这里的反斜杠被传递给日期命令,该命令没有将其视为特殊字符,因此只是将其打印出来。

在 bash 提示符下键入:

echo $efs

returns 空行,因为没有设置名为 efs 的变量。但是,如果我输入:

echo $efs

我得到:

$efs

这意味着定义变量名的美元符号的特殊含义被取消,shell 只是按原样打印出字符串。

在 OP 的帖子中,双引号正在转义其内容,即反斜杠和百分号。

我支持 KISS 规则:

    "Today is `date +%A`"

其中反引号在将 date 命令传递给 shell 后得到 date 命令的响应,+%A 告诉 date 如何格式化它的输出。

在date命令中,反斜杠没有转义%的特殊含义。

如果要在日期命令中打印 %A,可以使用以下命令。

$日期+"%%A" %A