배쉬 명령
cd -
이전에 사용한 디렉토리를 인쇄하고 변경합니다.
반면에 Bash 명령
cd ~-
아무것도 에코하지 않고 이전에 사용한 디렉토리로 직접 변경합니다.
그게 유일한 차이점인가요? 각 명령의 사용 사례는 무엇입니까?
배쉬 명령
cd -
이전에 사용한 디렉토리를 인쇄하고 변경합니다.
반면에 Bash 명령
cd ~-
아무것도 에코하지 않고 이전에 사용한 디렉토리로 직접 변경합니다.
그게 유일한 차이점인가요? 각 명령의 사용 사례는 무엇입니까?
답변:
여기에는 두 가지가 있습니다. 먼저, -
단독 디렉토리가 이전 디렉토리로 확장됩니다. 이것은 (강조 광산) cd
섹션에 설명되어 있습니다 man bash
.
-
디렉토리 변경을 시도하기 전에 인수 가 $ OLDPWD로 변환됩니다. CDPATH의 비어 있지 않은 디렉토리 이름이 사용되거나-
첫 번째 인수 인 경우 디렉토리 변경에 성공하면 새 작업 디렉토리의 절대 경로 이름이 표준 출력에 기록됩니다. 디렉토리가 성공적으로 변경되면 리턴 값은 true입니다. 그렇지 않으면 거짓.
따라서 간단 cd -
하게 이전 디렉토리로 이동하여 디렉토리 이름을 인쇄합니다. 다른 명령은 "틸드 확장"섹션에 설명되어 있습니다.
물결표 접두사가 a
~+
이면 쉘 변수 PWD의 값이 물결표 접 두부를 대체합니다. 물결표 접두어가 a~-
이면 쉘 변수 OLDPWD의 값이 설정되어 있으면이를 대체합니다. 물결표 접두어에서 물결표 뒤에 오는 문자가 선택적으로 a+
또는 a 접두어로 숫자 N으로 구성되는-
경우 물결표 접두어는 디렉토리 스택의 해당 요소로 대체됩니다. 물결표 접두어를 인수로 사용합니다. 물결표 접두사의 물결을 다음과 같은 문자가 선도적없이 숫자로 구성되어있는 경우+
나-
,+
가정한다.
예를 들어 이해하기가 더 쉬울 수 있습니다.
$ 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"/* .
set -x
확장 된 명령을 실행하기 전에 인쇄하면 차이를 설명하는 데 유용 할 수 있습니다 (또는 한 번에 한 단계 씩 직접 수행하지 않을 경우 읽기가 어려울 수 있음).
cd ~-/..
작품, cd -/..
하지 않습니다!
TL; DR은 : cd -
에 내장되어 cd
, ~-
이후 확장 ~[name]
, 특정하지 cd
.
POSIX.1-2008 Shell & Utilities 는 다음 명령 과 관련된cd -
특수한 경우로 정의합니다 .cd
a를
-
피연산자로 사용하는 경우 다음 명령과 같습니다.
cd "$OLDPWD" && pwd
이전 작업 디렉토리로 변경 한 다음 이름을 씁니다.
~-
확장에 확장됩니다 $OLDPWD
모든 명령이 실행되기 전에뿐 아니라 모든 명령에 대한 인수로 전달 될 수있다 cd
. ksh 및 bash 의 이후 확장입니다 .
앞에서 언급 한 POSIX.1-2008 Shell & Utilities 표준에도 Tilde Expansion에 대한 자세한 설명이 있습니다. 문구는 ~-
표준 범위 내에서 정의되지 않은 동작 으로 허용하기 위해 매우 구체적 입니다. 여기서 빈 문자열 인 경우 를 나타내 거나 유효한 사용자 이름 인 경우 사용자의 홈 디렉토리를 ~[name]
나타냅니다 .$HOME
[name]
name
name
cd ~-
.