对于命令:/ usr / bin / sh -c“ls 1`”(1之后的反引号)。
如何让它成功运行?在“`”之前添加反斜杠不起作用。 `我们知道这是一个特殊的字符,我也尝试用单引号括起来(/ usr / bin / sh -c“ls 1'`'”),但这也不起作用。
错误总是:
% /usr/bin/sh -c "ls 1\`"
Unmatched `
答案 0 :(得分:43)
你需要逃避反引号,但也要逃避反斜杠:
$ touch 1\` $ /bin/sh -c "ls 1\\\`" 1`
您必须“两次”转义它的原因是因为您在一个环境(例如shell脚本)中输入此命令,该环境会解释双引号字符串一次。然后由子shell再次解释。
你也可以避免使用双引号,从而避免第一种解释:
$ /bin/sh -c 'ls 1\`' 1`
另一种方法是将文件名存储在变量中,并使用该值:
$ export F='1`' $ printenv F 1` $ /bin/sh -c 'ls $F' # note that /bin/sh interprets $F, not my current shell 1`
最后,你尝试过的东西会对一些shell有用(我正在使用bash,就像上面的例子一样),显然不是你的shell:
$ /bin/sh -c "ls 1'\`'" 1` $ csh # enter csh, the next line is executed in that environment % /bin/sh -c "ls 1'\`'" Unmatched `.
我强烈建议您在first place中避免使用此类文件名。
答案 1 :(得分:4)
改为使用单引号:
/usr/bin/sh -c 'ls 1\`'
答案 2 :(得分:0)
/usr/bin/sh -c "ls '1\`'"