linux - 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
我在这里做错了什么?
解决方案
*
就是你所说的角色逃避情况。由于您保留了 的字面值*
,因此它失去了“所有文件”的含义,cp
而是尝试复制名为字面意思的文件*
。
当你运行时:
cp /home/testuser/tmp1/* /home/testuser/tmp2
shell 会透明地将其重写为:
cp /home/testuser/tmp1/bar /home/testuser/tmp1/foo /home/testuser/tmp2
此过程称为“路径名扩展”或“通配”。当您引用 时*
,不会发生这种重写。
推荐阅读
- powerbi - 使用 2 个事实表在 PowerBI 中执行 sumproduct
- javascript - 为什么 react.js 的终端出现“1:powershell”?
- javascript - 在同一个表上运行两个查询并在同一个路由上实现它们
- php - Laravel 过滤 hasMany 关系
- python - 为什么函数框架在我发送文件时返回 400 状态代码?
- maven - 在 gradle 中,没有 pom 文件的 maven 工件从 jcenter 工作,但不是 mavenCentral
- firebase - 颤动的火力库检索数据快照时出错.data.docs.length
- java - 在 Android Studio 中,有没有办法让 TextView 和 Checkbox 中的文本可点击以执行操作?(爪哇)
- python - 删除 find().limit() 中返回的所有文档
- javascript - 有什么方法可以在画布 javascript 中触发点击事件?