[bash] 경로 이름에 공백이있는 디렉토리로 cd 할 Bash 스크립트

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

백 슬래시로 특수 문자 (예 : 공백)를 이스케이프 할 수도 있습니다.


답변

이 페이지에서 아래 해결책을 찾았습니다 .

x="test\ me"
eval cd $x

(A)의 조합 \이중 인용 텍스트 상수와 eval전에 cd그것이 매력처럼 작동 만든다!


답변

동일한 문제로 어려움을 겪은 후 작동하는 두 가지 다른 솔루션을 시도했습니다.

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을 사용하십시오.