对于命令:/usr/bin/sh -c "ls 1`"(1 后的反引号)。
如何让它成功运行?在“`”之前添加反斜杠不起作用。` 是我们知道的一个特殊字符,我也尝试用单引号将它括起来(/usr/bin/sh -c "ls 1'`'"),但这也不起作用。
错误总是:
% /usr/bin/sh -c "ls 1\`"
Unmatched `
您需要转义反引号,还需要转义反斜杠:
$触摸1\` $ /bin/sh -c "ls 1\\\`" 1`
您必须“两次”转义它的原因是因为您在一个解释双引号字符串一次的环境(例如 shell 脚本)中输入此命令。然后它被子shell再次解释。
您还可以避免使用双引号,从而避免第一种解释:
$ /bin/sh -c 'ls 1\`' 1`
另一种方法是将文件名存储在变量中,并使用该值:
$ 出口 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'\`'" 无与伦比的`。
我强烈建议您首先避免使用此类文件名。
改用单引号:
/usr/bin/sh -c 'ls 1\`'
/usr/bin/sh -c "ls '1\`'"