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

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

这有效:

$ touch abcdefg
$ mv -v abcdefg abc[de]fg
‘abcdefg’ -> ‘abc[de]fg’

但这不起作用:

$ touch abcdefg
$ mv -v abcdefg abc[d]efg
mv: ‘abcdefg’ and ‘abcdefg’ are the same file

为什么?

答案1

shell 将根据文件名扩展模式。

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

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

    mv -v abcdefg abcdefg
    

尝试此操作以查看何时保留或扩展模式。

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

相关内容