如何摆脱路径中的“`”(重音/反引号)?

mra*_*ray 14 ssh command-line-interface mac-osx escaping path

我倾向于在经常使用的文件和文件夹前面加上“重音符号”字符(非移位波浪号、反勾号或普通的旧口音,whathaveyou..),因为它很容易理解,让我来看看按字母顺序排序,同时让我选择在顶部显示一些项目。它运行良好,除非我通过 CLI 或 SSH/SCP 访问这些文件。

如果我尝试运行命令,调用未转义的文件?它让我进入一个交互式会话......例如?

# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/
?
>
Run Code Online (Sandbox Code Playgroud)

然而,如果我尝试合乎逻辑的解决方案?

# scp -r dns.local:/\`Downloads/CrazyRussianCars/ ~/
?
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

我知道“新”规则是使用像export NOW=$(date)vs export NOW= `date`这样的语法 (实际上,我什至用 SE MD 语法编写后者...),但这与ENV脚本或任何脚本无关。 ..

注意:一个 Mac OS X 环境,但也就是说,GUI 在日常处理这个字符时从来没有遇到过问题,通常,如果终端中出现语法问题,Apple在禁用 GUI 中的行为方面做得非常好......不确定这是否是一个错误,或者处理此类路径的技术是否只是晦涩难懂......但到目前为止,我一直无法找到方式“逃避它”

Rik*_*der 12

您可以使用 Jed Daniels 提到的 3 个反斜杠,也可以将其用单引号括起来(')并使用单个反斜杠。

两者的例子如下。

$ touch dir/'`rik' 
$ ls -l dir
total 1865376
-rw-r--r--  1 rik  staff          0 Jul  1 09:51 `rik 
$ scp localhost:dir/\\\`rik ./ `rik         
100%    0     0.0KB/s   00:00     
$ scp localhost:dir/'\`rik' ./ `rik     
100%    0     0.0KB/s   00:00     
$
Run Code Online (Sandbox Code Playgroud)


Jed*_*els 6

三个反斜杠应该这样做:

jed@jed-osx:~$ ls -la \`foo
ls: `foo: No such file or directory
jed@jed-osx:~$ scp desk:\\\`foo .
`foo                                            100%    0     0.0KB/s   00:00    
jed@jed-osx:~$ ls -la \`foo
-rw-r--r--  1 jed  staff  0 Jul  1 09:45 `foo
jed@jed-osx:~$ rm \`foo
Run Code Online (Sandbox Code Playgroud)

第一个反斜杠转义反引号,因此它被发送到另一侧,但另一侧抛出错误,因为它期望反引号成对出现。第二个反斜杠转义第一个反斜杠,然后您需要额外的两个反斜杠,以便您可以将转义的反斜杠发送到另一侧。

编辑:正如 Rik 提到的,你也可以用单引号来做到这一点。我没有想到这一点,因为你不能用变量来使用它(当在单引号中时,它们不会在本地系统上扩展)。