![この名前変更操作が機能しないのはなぜですか? [コピー]](https://linux33.com/image/75313/%E3%81%93%E3%81%AE%E5%90%8D%E5%89%8D%E5%A4%89%E6%9B%B4%E6%93%8D%E4%BD%9C%E3%81%8C%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
これは働きます:
$ 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
シェルはファイル名に基づいてパターンを拡張します。
最初の形式は(no e)および/または(no d)に拡張され、両方のファイルが存在しないため、パターンは拡張されていません。コマンドは効果的に考えられます。
abcdfg
abcefg
mv -v "abcdefg" "abc[de]fg"
2番目の形式はに拡張され、
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