转义Unix shell

时间:2015-10-15 20:02:35

标签: shell unix quoting

据说" " ,' ' ,\逃避特殊人物a.k.a他们的特殊含义,但当我做这样的事情时

date +"Today is \%A"

它不会写"今天是%A"但它写的结果与没有" \"相同。 ="今天是thurstday"。为什么会这样?我以为我理解unix中的字符是如何工作的,但这让我很困惑

我将它输入到终端im on / bin / bash /(那就是$ SHELL输出),奇怪的是,如果\没有在日期中转义char,使用ssh连接到服务器并运行命令有效逃避,例如

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

3 个答案:

答案 0 :(得分:3)

转义特殊字符通常在shell中。例如,在bash中我得到:

Today is \Wednesday

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

在bash提示符下键入:

echo $efs

返回一个空行,因为没有名为efs set的变量。但是如果我输入:

echo \$efs

我明白了:

$efs

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

答案 1 :(得分:0)

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

我用这样的东西去寻求KISS规则:

    "Today is `date +%A`"

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

答案 2 :(得分:0)

在date命令中,反斜杠不会逃避%的特殊含义。

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

$ date +“%% A” %A