이름에 빼기 기호만 있는 디렉토리를 입력하는 방법은 무엇입니까?

이름에 빼기 기호만 있는 디렉토리를 입력하는 방법은 무엇입니까?

다운로드했습니다수업내 웹 서버로 가서 압축을 푼다.

라는 폴더가 포함되어 있습니다 -. 나는 이 문제를 어떻게 처리해야 할지 안다고 생각했지만, 그렇지 않았습니다.

시도해 보았지만 cd -- -원하는 효과가 없었습니다. 따옴표를 사용해도 영향을 미치지 않는 것 같습니다. 슬래시를 곳곳에 넣었지만 작동하지 않았습니다.

이 폴더를 변경하는 올바른 방법은 무엇입니까?

답변1

매개변수가 되는 것을 방지하고 싶으므로 매개변수 앞에 뭔가를 추가해 보겠습니다. 현재 디렉토리는 를 사용하여 액세스할 수 있으므로 .하위 폴더도 을 사용하여 액세스할 수 있습니다.-./-

cd ./-

cd -- -작동하지 않는 이유는 비교하면 구현이 다르기 때문입니다 rm(참조man rm) cd확인하다man bash또는man cd)은 cd다르게 해석되어 -매개변수로 처리됩니다(참조:man bash또는man cd).

cd또한 이것은 다음에서 사용할 수 있는 쉘 내장 함수라는 점에 유의해야 합니다.이 답변:

cd외부 명령이 아니라 쉘 내장 기능입니다. 외부 명령과 같이 분기/실행 컨텍스트에서 별도의 프로세스가 아닌 현재 셸의 컨텍스트에서 실행됩니다.

외부 명령이 있지만 cd뭔가를 수행합니다.완전히 다른.

이는 구현이 다른 이유를 설명합니다.불다그리고핵심 도구두 가지가 다릅니다.

당신이 이것을 믿지 않는다고 가정하면, 이것을 어떻게 증명할 수 있습니까? which및 을 사용합니다 type.

 $ which cd && type cd
which: no cd in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.2:/usr/games/bin
cd is a shell builtin
 $ which rm && type rm
/bin/rm
/bin/rm is /bin/rm

바라보다man which자세한 내용은man bash또는man type~을 위한type

답변2

빼기 기호(대시라고도 함) 자체는 옵션이 아니라 피연산자(즉, 옵션에 대한 인수가 아님)입니다. 따라서 --앞에 놓는 것은 아무런 효과가 없습니다. 대시는 의 피연산자 cd -이며 에서도 피연산자로 유지됩니다 cd -- -. 다른 표준 유틸리티와 마찬가지로 cd피연산자는 피연산자 앞에 있거나 없는 것처럼 처리됩니다 --.

cd명령은 피연산자에 특별한 의미를 할당합니다 -. 다른 것들은 전환될 디렉토리입니다. 피연산자로 특별하지 않고 옵션 으로 처리되지 않으므로 cd -- -a명명된 디렉터리로 전환합니다 . 이것은 단일 경우에는 작동하지 않으며 옵션도 아닙니다.-a-a--cd-

어쨌든 피연산자는 결국 전달되므로 따옴표를 추가해도 -도움이 되지 않습니다 .-

따라서 유일한 방법은 동일한 아이디어를 표현하는 다른 방법, 즉 동일한 디렉토리에 대한 다른 이름을 찾는 것입니다. 다행히도 쉬운 방법이 있습니다. ./상대 파일 이름을 앞에 붙이면 여전히 동일한 파일을 의미합니다. 이는 ./차이를 가져오며, 이는 우리의 경우에는 관련이 없습니다. 디렉토리 이름이 CDPATH, 또는 로 시작하면 상담이 수행되지 않습니다. 그러므로:/./../

cd ./-

-또 다른 방법은 디렉토리이기 때문에 뒤에 추가하는 것입니다 /. /파일 이름 끝에 a를 추가하면 파일이 디렉터리로 처리됩니다(특히 파일이 디렉터리에 대한 심볼릭 링크인 경우 명령은 심볼릭 링크가 아닌 디렉터리 자체에서 작동함). 차이점 . 그러므로:

cd -- -/

-/그건 그렇고, 완성 코드는 제안된 대로 작성되었지만 bash에서는 실제로 --이전 상황에만 적용되며 bash에는 특별한 경우가 없습니다 cd -/(zsh는 그렇습니다).

답변3

경로를 통한 자격은 선택 사항입니다.

cd ./-

답변4

다음도 작동합니다.

cd ~/'-'

또는

cd ~/"-"

관련 정보