"cd -"와 "cd ~~"의 차이점

"cd -"와 "cd ~~"의 차이점

배시 명령

cd - 

이전에 사용된 디렉토리를 인쇄하고 해당 디렉토리로 변경합니다.

반면에 Bash 명령은

cd ~-

아무것도 에코하지 않고 이전에 사용된 디렉토리로 직접 변경됩니다.

그게 유일한 차이점인가요? 각 명령의 사용 사례는 무엇입니까?

답변1

여기에는 두 가지 일이 있습니다. 먼저 -이전 디렉터리로 확장됩니다. 이에 대해서는 (강조) cd섹션 에서 설명합니다 .man bash

-디렉터리 변경이 시도되기 전에 인수가 $OLDPWD로 변환됩니다.CDPATH의 비어 있지 않은 디렉토리 이름이 사용되거나 가 -첫 번째 인수이고 디렉토리 변경이 성공한 경우 새 작업 디렉토리의 절대 경로 이름이 표준 출력에 기록됩니다. 디렉터리가 성공적으로 변경되면 반환 값은 true입니다. 그렇지 않으면 거짓입니다.

따라서 간단한 명령을 사용 cd -하면 이전 디렉터리로 돌아가서 디렉터리 이름을 인쇄할 수 있습니다. 다른 명령은 "물결표 확장" 섹션에 설명되어 있습니다.

물결표 접두사가 이면 ~+쉘 변수 PWD의 값이 물결표 접두사를 대체합니다. 물결표 접두사가 이면 ~-쉘 변수 OLDPWD의 값(설정된 경우)이 대체됩니다. 물결표 접두사에서 물결표 뒤에 오는 문자가 숫자 N으로 구성되고 선택적으로 a +또는 a 접두사가 추가되는 경우 -물결표 접두사는 호출된 dirs 내장에 의해 표시되는 것처럼 디렉터리 스택의 해당 요소로 대체됩니다. 물결표 접두어를 인수로 사용합니다. 물결표 접두사에서 물결표 뒤의 문자가 앞에 +또는 -이 없는 숫자로 구성된 경우 +가정됩니다.

다음 예를 들어보면 더 쉽게 이해할 수 있습니다.

$ pwd
/home/terdon
$ cd ~/foo
$ pwd
/home/terdon/foo
$ cd /etc
$ pwd
/etc
$ echo ~        ## prints $HOME
/home/terdon
$ echo ~+       ## prints $PWD
/etc
$ echo ~-       ## prints $OLDPWD
/home/terdon/foo

따라서 일반적으로 -"이전 디렉터리"를 의미합니다. 그렇기 때문에 cd -저절로 당신이 있던 곳으로 다시 돌아갈 것입니다.

주요 차이점은 내장 cd -에 따라 다르다는 것입니다 cd. 시도 echo -하면 -. 물결표 확장 기능의 일부 이며 ~-변수와 유사하게 작동합니다. 그렇기 때문에 echo ~-의미 있는 것을 얻을 수 있고 얻을 수 있습니다. 에서도 사용할 수 있지만 cd ~-다른 명령에서도 사용할 수 있습니다. 예를 들어 cp ~-/* .다음과 같습니다.cp "$OLDPWD"/* .

답변2

~-물결표 확장이 적용되므로(man bash 참조) cd이전 디렉터리 이름이 직접 표시됩니다. -셸에 의해 확장되지 않고 cd직접 확인되며 문서화된 대로 작동합니다.

- 인수는 $OLDPWD와 동일합니다. CDPATH의 비어 있지 않은 디렉토리 이름이 사용되거나 -가 첫 번째 인수이고 디렉토리 변경이 성공한 경우 새 작업 디렉토리의 절대 경로 이름이 표준 출력에 기록됩니다.

답변3

TL;DR: cd -에 내장되어 있으며 cd~-이후 확장이며 ~[name]에 국한되지 않습니다 cd.

POSIX.1-2008 셸 및 유틸리티cd -특별한 경우로 정의합니다 .특정한에 대한cd명령:

-a가 피연산자로 사용되는 경우 이는 다음 명령과 동일합니다.

cd "$OLDPWD" && pwd

이전 작업 디렉터리로 변경된 다음 해당 이름을 씁니다.

확장 은 명령이 실행되기 전 ~-으로 확장되며 . 나중에 확장된 내용입니다.$OLDPWDcd그리고.

앞서 언급한 POSIX.1-2008 Shell & Utilities 표준에도물결표 확장에 대한 자세한 설명. 이 표현은 ~-표준 범위 내에서 정의되지 않은 동작을 허용하기 위해 매우 구체적입니다 . 여기서는 if 가 빈 문자열이거나 유효한 사용자 이름 인 경우 사용자의 홈 디렉터리를 ~[name]나타 냅니다.$HOME[name]namename

관련 정보