为什么这个重命名操作不起作用?

Emm*_*maV 1 bash patterns mv

这有效:

$ touch abcdefg
$ mv -v abcdefg abc[de]fg
‘abcdefg’ -> ‘abc[de]fg’
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

$ touch abcdefg
$ mv -v abcdefg abc[d]efg
mv: ‘abcdefg’ and ‘abcdefg’ are the same file
Run Code Online (Sandbox Code Playgroud)

为什么?

Arc*_*mar 10

外壳将根据文件名扩展模式。

  • 第一种形式扩展为(no e) 和/或(no d) 并且两个文件都不存在,因此模式未展开,命令就是您认为的那样;有效地,abcdfgabcefg

    mv -v "abcdefg" "abc[de]fg"
    
    Run Code Online (Sandbox Code Playgroud)
  • 第二种形式扩展为abcdefg,并且该文件存在,因此模式扩展为文件名,因此命令实际上是,

    mv -v abcdefg abcdefg
    
    Run Code Online (Sandbox Code Playgroud)

试试这个,看看什么时候保持或扩展模式。

touch abcdefg
ls -l abc[de]fg ; echo abc[de]fg
ls -l abc??fg ;   echo abc??fg
ls -l abc?fg ;    echo abc?fg
ls -l abc[d]efg ; echo abc[d]efg
Run Code Online (Sandbox Code Playgroud)