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

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

배시 명령

cd - 

이전에 사용한 디렉토리를 인쇄하고 변경하십시오.

반면에 Bash 명령은

cd ~-

아무 것도 표시하지 않고 이전에 사용한 디렉터리로 직접 변경합니다.

이것이 유일한 차이점입니까? 각 명령의 사용 사례는 무엇입니까?

답변1

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

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

따라서 간단한 조작으로 cd -이전 디렉토리로 돌아가서 디렉토리 이름을 출력할 수 있습니다. 또 다른 명령은 "물결표 확장" 섹션에 설명되어 있습니다.

물결표 접두사가 a 인 경우 ~+쉘 변수 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

핵심요약: cd -에 내장된 은 cd~-후속 확장이며 ~[name]에 국한되지 않습니다 cd.

POSIX.1-2008 셸 및 유틸리티cd -특별한 경우로 정의됩니다 .특정한~을 위한cd주문하다:

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

cd "$OLDPWD" && pwd

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

확장 은 명령이 실행되기 전에 ~-확장되며 .$OLDPWDcd그리고.

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

관련 정보