在shell中的双引号字符串中回退引用

对于命令:/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脚本)中输入这个命令,它解释双引号字符串一次.然后它被subshel​​l再次解释.

你也可以避免双引号,从而避免了第一个解释:

$/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中避免使用这样的文件名.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...