bash 中一个与转义字符有关的奇怪问题

2018-04-08 17:53:53 +08:00
 qsnow6

mv foo.tmp "-foo.tmp"

上面这个命令,按照规则,已经加上双引号做转义处理了,为什么还会被当做 option 处理?

@:/mnt/d/video/Movie/Movie$ mv foo.tmp "-foo.tmp"
mv: invalid option -- 'o'
Try 'mv --help' for more information.
1065 次点击
所在节点    问与答
5 条回复
hicdn
2018-04-08 18:03:05 +08:00
mv foo.tmp "./-foo.tmp"
rrfeng
2018-04-08 18:03:42 +08:00
- 是没法被转义的,而且也不属于#转义#这个概念范围之内


这样写:mv -- a -b

-- 可以告诉命令停止解析 options
mcfog
2018-04-08 18:15:15 +08:00
正解楼上有

bash 做的事启动 mv 这个 binary,传了两个字符串`foo.tmp`和`-foo.tmp`给 mv,双引号是不会传给 mv 的

( bash )转义的范围是对 bash 来说有特殊含义的字符,比如你要删除名字为双引号的文件,写给 bash 看的是

mv \"
或者
mv '"'

这个时候 bash 理解你的转义,启动 mv 的时候传的参数是字面上的一个双引号`"`,仍然和 mv 命令本身没有关系
IvanLi127
2018-04-08 18:57:20 +08:00
@mcfog mv 不是 move 移动吗?
msg7086
2018-04-09 01:13:36 +08:00
谁告诉你横线需要的是转译?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/445146

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX