이 이름 바꾸기 작업이 작동하지 않는 이유는 무엇입니까? [복사]

이 이름 바꾸기 작업이 작동하지 않는 이유는 무엇입니까? [복사]

이것은 작동합니다:

$ 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)로 확장되고 두 파일 모두 존재하지 않으므로 패턴은 확장되지 않은 상태로 유지되며 명령은 효과적으로 생각됩니다.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

관련 정보