지원 확장이 작동하지 않습니다

지원 확장이 작동하지 않습니다

-Bash에서 접두어까지 제거되도록 파일 이름을 바꾸고 싶은데 중괄호 확장에서는 작동하지 않는 이유는 무엇입니까?

$ ls
Thomas Anderson, Michael Dahlin-Operating Systems

$ mv {Thomas\ Anderson,\ Michael\ Dahlin-,}Operating\ Systems
mv: target ‘Operating Systems’ is not a directory

답변1

파일에 ,교정기 확장에 대한 고유한 내용이 포함되어 있으므로 교정기 확장이 다음으로 확장됩니다.원하는 두 개가 아닌 문자열입니다.

당신은 시도 할 수 있습니다:

$ printf '%s\n' {Thomas\ Anderson,\ Michael\ Dahlin-,}Operating\ Systems
Thomas AndersonOperating Systems
 Michael Dahlin-Operating Systems
Operating Systems

버팀대 확장이 어떻게 확장되는지 확인하세요.


빠른 수정은 탈출하는 것입니다 ,.

$ printf '%s\n' {Thomas\ Anderson\,\ Michael\ Dahlin-,}Operating\ Systems
Thomas Anderson, Michael Dahlin-Operating Systems
Operating Systems

답변2

아마도 가장 쉬운 방법은 printf및 를 사용하는 것입니다 set --.

짧은 버전:

$ set -- {"Thomas Anderson, Michael Dahlin-",}"Operating Systems"
$ mv "$@"
$ ls
Operating Systems  

또는 더 자세한 설명: 원하는 것이 아닌 것으로 나타났습니다.

$ printf '%s\n' {Thomas\ Anderson,\ Michael\ Dahlin-,}Operating\ Systems
Thomas AndersonOperating Systems
 Michael Dahlin-Operating Systems
Operating Systems

원하는 대로 되었을 때(인용이 가장 쉬운 방법입니다):

$ printf '%s\n' {"Thomas Anderson, Michael Dahlin-",}"Operating Systems"
Thomas Anderson, Michael Dahlin-Operating Systems
Operating Systems

그냥 변경 printf해서 set --사용하세요mv "$@"

$ mkdir mydir
$ cd mydir
$ touch 'Thomas Anderson, Michael Dahlin-Operating Systems'
$ ls
Thomas Anderson, Michael Dahlin-Operating Systems
$ printf '%s\n' {"Thomas Anderson, Michael Dahlin-",}"Operating Systems"
Thomas Anderson, Michael Dahlin-
Operating Systems
$ set -- {"Thomas Anderson, Michael Dahlin-",}"Operating Systems"
$ printf '%s\n' "$@"
Thomas Anderson, Michael Dahlin-
Operating Systems
$ mv "$@"
$ ls
Operating Systems

관련 정보