这有效:
$ 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)