![이 이름 바꾸기 작업이 작동하지 않는 이유는 무엇입니까? [복사]](https://linux55.com/image/75313/%EC%9D%B4%20%EC%9D%B4%EB%A6%84%20%EB%B0%94%EA%BE%B8%EA%B8%B0%20%EC%9E%91%EC%97%85%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%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"
두 번째 형식은 로 확장
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