이것은 작동합니다:
$ 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