V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qsnow6
V2EX  ›  问与答

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

  •  
  •   qsnow6 · 2018-04-08 17:53:53 +08:00 · 1140 次点击
    这是一个创建于 2451 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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.
    
    5 条回复    2018-04-09 01:13:36 +08:00
    hicdn
        1
    hicdn  
       2018-04-08 18:03:05 +08:00
    mv foo.tmp "./-foo.tmp"
    rrfeng
        2
    rrfeng  
       2018-04-08 18:03:42 +08:00 via Android   ❤️ 1
    - 是没法被转义的,而且也不属于#转义#这个概念范围之内


    这样写:mv -- a -b

    -- 可以告诉命令停止解析 options
    mcfog
        3
    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
        4
    IvanLi127  
       2018-04-08 18:57:20 +08:00 via Android
    @mcfog mv 不是 move 移动吗?
    msg7086
        5
    msg7086  
       2018-04-09 01:13:36 +08:00
    谁告诉你横线需要的是转译?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2858 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:34 · PVG 22:34 · LAX 06:34 · JFK 09:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.