`-`는 CD에만 사용할 수 있나요?

`-`는 CD에만 사용할 수 있나요?

cd -현재 디렉터리와 이전 디렉터리 간에 전환할 수 있습니다.

이전에 다른 명령에 대한 인수로 사용된 것을 본 것 같습니다 . if 가 with 와 같은 의미인지 -는 기억나지 않습니다 .-cd

나는 이것이 -작동하지 않는다는 것을 알았습니다 ls.

- CD에만 사용할 수 있나요?

답변1

-에 정의됨POSIX 유틸리티 구문 가이드표준 입력으로:

Guideline 13:
For utilities that use operands to represent files to be opened for either 
reading or writing, the '-' operand should be used to mean only standard input 
(or standard output when it is clear from context that an output file is being 
specified) or a file named -.

파일을 읽거나 쓰는 유틸리티의 정의를 볼 수 있습니다. cd는 이러한 유틸리티에 속하지 않으므로 -CD에서는 이 지침을 따르지 않습니다.

또한 POSIX는 -자체 의미를 정의합니다.CD:

-
    When a <hyphen> is used as the operand, this shall be equivalent to the 
    command:

    cd "$OLDPWD" && pwd

    which changes to the previous working directory and then writes its name.

답변2

cd -이는 실제로 디렉토리를 방금 있던 디렉토리로 변경할 때마다 설정되는 약어입니다 cd "$OLDPWD" && pwd.$OLDPWD

처리는 -응용 프로그램에 따라 다릅니다. 일부 응용 프로그램은 예를 들어 다음을 -나타내는 데 사용됩니다 .STDINgrepawk

다른 응용 프로그램은 Michael의 답변에 지정된 대로 -선택한 모든 것에 대한 약칭 으로 사용할 수 있습니다 su.---login

답변3

이것POSIX 유틸리티 구문 가이드(구체적으로 #13) 파일 이름을 읽을 것으로 예상되는 유틸리티의 경우 -표준 입력을 나타내고, 파일 이름을 쓸 것으로 예상되는 유틸리티의 경우 -표준 출력을 나타냄을 지정합니다. 예를 들어 표준 출력에 cat somefile -내용을 복사한 somefile다음 표준 입력에서 읽은 내용을 복사합니다.

cd이 명령은 파일을 읽거나 쓰지 않으므로 이 가이드는 적용되지 않습니다 .cd뭔가 다른 일을 합니다. 매개변수는 -"이전 디렉터리"를 의미합니다. 이 명령 cd -은 와 동일합니다 cd "$OLDPWD" && pwd. 이 동작은 cd명령뿐만 아니라 직접 영감을 받은 명령에도 적용됩니다 pushd.

이는 -옵션이 아니라 피연산자입니다. or -가 아닌 and로 시작하는 매개변수 만 옵션입니다. 피연산자라는 주요 의미는 그 특별한 의미에 영향을 주지 않는 것입니다. 예를 들어 이라는 하위 디렉터리로 변경되지만 이라는 디렉터리로는 변경되지 않습니다 . 다시 말하지만, 호출하는 file 에서 읽는 대신 표준 입력에서 읽습니다.-----cd -- -P-Pcd -- -cd --cat -- --

답변4

Michael이 이것을 언급했지만 su다른 응용 프로그램에서는 이를 사용하여 -원하는 것을 의미할 수 있습니다(stdin에서 읽는 것이 일반적입니다).Git이 사용되는 방식은 실제로 -다음과 같습니다.cd, 지점 변경용.

$ git status
On branch master

$ git checkout foobar
$ git status
On branch foobar

$ git checkout -
$ git status
On branch master

관련 정보