首页 > 解决方案 > Linux 命令和单引号

问题描述

我认为单引号只是保留引号中每个字符的文字值,并且除了那些字符转义情况外不会干扰命令结果。

例如,下面的两个命令返回相同的结果。

$ ls /home/testuser/tmp1
$ ls '/home/testuser/tmp1'

下面的这个命令运行成功。

$ cp /home/testuser/tmp1/* /home/testuser/tmp2

但是,下面的命令出错了。

$ cp '/home/testuser/tmp1/*' /home/testuser/tmp2 
cp: cannot stat '/home/testuser/tmp1/*': No such file or directory

我在这里做错了什么?

标签: linuxcommandsingle-quotes

解决方案


*就是你所说的角色逃避情况。由于您保留了 的字面值*,因此它失去了“所有文件”的含义,cp而是尝试复制名为字面意思的文件*

当你运行时:

cp /home/testuser/tmp1/* /home/testuser/tmp2 

shell 会透明地将其重写为:

cp /home/testuser/tmp1/bar /home/testuser/tmp1/foo /home/testuser/tmp2 

此过程称为“路径名扩展”或“通配”。当您引用 时*,不会发生这种重写。


推荐阅读