-
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