
배시 명령
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
이전 작업 디렉터리로 변경된 다음 해당 이름을 씁니다.
확장 은 명령이 실행되기 전 ~-
으로 확장되며 . 나중에 확장된 내용입니다.$OLDPWD
cd
크쉬그리고세게 때리다.
앞서 언급한 POSIX.1-2008 Shell & Utilities 표준에도물결표 확장에 대한 자세한 설명. 이 표현은 ~-
표준 범위 내에서 정의되지 않은 동작을 허용하기 위해 매우 구체적입니다 . 여기서는 if 가 빈 문자열이거나 유효한 사용자 이름 인 경우 사용자의 홈 디렉터리를 ~[name]
나타 냅니다.$HOME
[name]
name
name