在外壳程序中用双引号引起来的反引号
收藏

对于命令:/ usr / bin / sh -c“ ls 1`”(1后的反引号)。

如何使其成功运行?在“`”之前添加反斜杠不起作用。 正如我们所知,`是一个特殊字符,我也尝试用单引号将其括起来(/ usr / bin / sh -c“ ls 1'`'”“),但这也不起作用。

该错误始终是:

% /usr/bin/sh -c "ls 1\`"
Unmatched `

最佳答案

您需要避开反引号,但也要避开反斜杠:

$ touch 1 \`
$ / bin / sh -c“ ls 1 \\\`”
1`

您必须“两次”对其进行转义的原因是,因为您是在一次解释双引号字符串的环境(例如shell脚本)中输入此命令的。然后,它由子外壳再次解释。

您还可以避免使用双引号,从而避免第一种解释:

$ / bin / sh -c'ls 1 \`'
1`

另一种方法是将文件名存储在变量中,并使用该值:

$ export F ='1`'
$ printenv F
1`
$ / bin / sh -c'ls $ F'#注意/ bin / sh解释$ F,而不是我当前的shell
1`

最后,您尝试的方法将在某些shell上工作(对于上面的示例,我正在使用bash),但显然不适合您的shell:

$ / bin / sh -c“ ls 1'\`'”
1`
$ csh#输入csh,在该环境下执行下一行
%/ bin / sh -c“ ls 1'\`'”
无与伦比的`。

我强烈建议您首先避免使用此类文件名。

    公众号
    关注公众号订阅更多技术干货!