macOS X에서 Bash를 사용하고 있으며 실행시 다른 디렉터리로 변경되는 간단한 실행 스크립트 파일을 만들고 싶습니다. 그러나 해당 디렉토리의 경로에는 공백이 있습니다. 도대체 어떻게하는거야? 이것이 내가 가진 것입니다 …
파일 이름 : cdcode
파일 내용 :
cd ~/My Code
이제는 긴 경로 이름은 아니지만 실제 경로 이름은 5 개의 디렉토리 깊이이고 그 중 4 개는 경로에 공백이 있습니다.
BTW, 나는 해봤 cd "~/My Code"
과 cd "~/My\ Code"
와 어느 쪽도 이들의이 일을하지 않습니다.
답변
경로를 큰 따옴표로 묶으면 물결표 확장이 중지됩니다. 따라서이를 수행하는 몇 가지 방법이 있습니다.
cd ~/"My Code"
cd ~/'My Code'
물결표는 여기에 인용되지 않으므로 물결표 확장은 계속 실행됩니다.
cd "$HOME/My Code"
큰 따옴표로 묶인 문자열 내에서 환경 변수를 확장 할 수 있습니다. 이것은 기본적으로 물결표 확장이하는 일입니다.
cd ~/My\ Code
백 슬래시로 특수 문자 (예 : 공백)를 이스케이프 할 수도 있습니다.
답변
답변
동일한 문제로 어려움을 겪은 후 작동하는 두 가지 다른 솔루션을 시도했습니다.
1. ""
변수에 큰 따옴표 ( )를 사용하십시오.
가장 쉬운 방법은 이전 답변에서 지적한 것처럼 변수를 큰 따옴표로 묶는 것입니다.
cd "$yourPathWithBlankSpace"
2 eval
..
이 답변 Unix 명령에 따라 공백을 이스케이프 처리 하면 다음 eval
과 같이 공백을 제거하고 사용할 수 있습니다 .
yourPathEscaped=$(printf %q "$yourPathWithBlankSpace")
eval cd $yourPathEscaped
답변
cd ~/My\ Code
나를 위해 작동하는 것 같습니다 … 따옴표를 삭제했지만 슬래시를 유지하는 것이 작동하지 않으면 샘플 코드를 게시 할 수 있습니까?
답변
다음 중 하나를 사용할 수 있습니다.
cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"
다음을 사용할 수 없습니다.
cd ~"/My Code"
첫 번째 방법은 쉘이 ~ /를 $ HOME /으로 확장 한 다음 큰 따옴표없이 내 코드를 택하기 때문에 작동합니다. 두 번째는 매핑 할 ‘ "
‘(큰 따옴표) 라는 사용자가 없기 때문에 실패 ~"
합니다.
답변
단일 백 슬래시가 작동합니다.
ry4an@ry4an-mini:~$ mkdir "My Code"
ry4an@ry4an-mini:~$ vi todir.sh
ry4an@ry4an-mini:~$ . todir.sh
ry4an@ry4an-mini:My Code$ cat ../todir.sh
#!/bin/sh
cd ~/My\ Code
문제가 쉘 스크립트가 서브 쉘의 디렉토리를 변경하는 것이 아니라는 것이 확실합니까?하지만 완료되면 메인 쉘 (및 원래 디렉토리)로 돌아갑니다. 나는. 대부분의 사람들은 별칭을 사용하지만 현재 셸에서 스크립트를 실행합니다. 공간은 붉은 청어 일 수 있습니다.
답변
스크립트에서 ~를 피하십시오. 대신 $ HOME을 사용하십시오.