在 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
据说 " " , ' ' , \ 转义特殊字符 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