使用 cd 命令在 Ubuntu 中导航具有特殊字符的目录

Ama*_*man 12 filesystem command-line bash

当我想导航到名称中包含特殊字符的目录时,我收到一条错误消息。

例如:

aman@desktop:~/Aman$ cd !)e$!gn&(reate
bash: !: event not found
aman@desktop:~/Aman$ 
Run Code Online (Sandbox Code Playgroud)

!)e$!gn&(reate是我要导航的目录名称。

如何纠正这个错误?

如何使用cd命令在 Ubuntu 中导航目录名称带有特殊字符的目录?

Aar*_*ron 19

发生该错误是因为!(bang) 是一个快捷方式,允许您从历史记录中重新运行命令。例如:此命令从我的历史记录中重新运行命令 #1504。

$ !1504
Run Code Online (Sandbox Code Playgroud)

为避免该问题,请尝试用单引号封装您的目录名称。

$ cd '!)e$!gn&(reate'
Run Code Online (Sandbox Code Playgroud)

话虽如此,虽然 Ubuntu (Linux) 允许您以这种方式命名目录,但我强烈建议您不要这样做。在目录名称中使用特殊字符会使它们难以阅读,如果您使用的是保留字符,则始终需要对其进行转义或将目录名称封装在引号中。

  • `set +H` 或 `set +o histexpand` 禁用对 `!` 的特殊处理。将它添加到你的 `~/.bash_profile` 甚至一些系统范围的配置文件中,你就少了一件需要担心的事情。除非您实际使用此功能,否则。 (2认同)

Bac*_*ash 10

\在特殊字符之前使用

cd \!\)e\$\!gn\&\(reate
Run Code Online (Sandbox Code Playgroud)

您还可以将整个文件夹名称放在单引号中

cd '!)e$!gn&(reate'
Run Code Online (Sandbox Code Playgroud)

您可以将整个路径封装在单引号中

cd 'Desktop/!)e$!gn&(reate'
Run Code Online (Sandbox Code Playgroud)

如果要引用 /home/username 目录中的~/路径:只需在路径前添加单引号

cd ~/'Desktop/!)e$!gn&(reate'
Run Code Online (Sandbox Code Playgroud)


gle*_*man 5

交互地,输入cd !然后点击Tab和 bash 将填充其余部分,正确转义。