명령 줄 매개 변수에서 "-"(대시)의 마법은 무엇입니까?


101

예 :

  • ISO 이미지를 만들고 CD에 직접 굽습니다.

    mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw -

  • 이전 디렉토리로 변경하십시오.

    cd -

  • 포트 12345에서 수신하고 전송 된 데이터를 untar하십시오.

    nc -l -p 12345 | tar xvzf -

대시의 목적은 무엇이며 어떻게 사용합니까?

답변:


111

명령 -끝에 벌거 벗은 것을 의미하는 경우 tar파일을 사용하려는 많은 명령에서 일반적입니다.

실제 파일 이름이 아닌 표준 입력 또는 출력을 지정할 수 있습니다 .

이것이 첫 번째와 세 번째 예의 경우입니다. 예를 cdrecord들어이 명령은 표준 입력 (에서 생성 한 ISO 이미지 스트림 mkisofs)을 가져 와서 /dev/dvdrw.

cd명령을 사용하면 디렉토리를 변경할 때마다 가져온 디렉토리가 저장됩니다. 당신이 경우에 cd특별한와 -"디렉토리 이름", 대신 진짜 하나의 기억 디렉토리를 사용합니다. 이를 사용하여 두 디렉토리 사이를 매우 빠르게 전환 할 수 있습니다.

다른 명령은 다른 특수 값 -으로 취급 될 수 있습니다 .


9
당신은 또한 사용할 수 있습니다 -당신이 이전 분기로 다시 전환 할 수 있습니다 즉, 자식 지점에 대한git checkout -
snappieT

3
tar 문서의 어디에서 지원된다는 설명이 있습니까? 어떤 명령이 지원하는지 어떻게 알 수 있습니까?

1
명령에에 대한 특별한 의미가 -있는 경우 man 페이지에서 설명을 찾을 수 있습니다.
codeforester

SU - 쉘 #make 로그인 쉘
atongsa

다음과 같은 매우 흥미로운 명령이 있습니다. tar -cvf-/ home | aescrypt -e -p 사과-> backup_files.tar.aes 실제로는 tar -cvf-/ home | aescrypt -e -p apples -o backup_files.tar.aes-파이핑 문자 | 마지막 대시가 없어야합니다. 그러나 마지막 대시가 없으면 명령이 실패합니다. 비논리적으로 들립니다. 누군가 나에게 명령 줄에서 네이 키드 대시 의미가 설명 된 참조를 제공 할 수 있습니까? 아무것도 찾을 수 없습니다.
elmclose

22

마법이 아닙니다. 일부 명령 -은 사용자가 stdin에서 읽거나 stdout에 쓰려는 것으로 해석 합니다. 쉘에는 특별한 것이 없습니다.


9
의 경우를 제외하고 cd -; 당신이 쓴 것처럼 bash(1)처리합니다 . cd -cd $OLDPWD
sarnold

6
@sarnold 그러나 요점은 동일 cd합니다. 쉘 내장 명령은 대시 자체를 해석합니다. No "magic":-)

2
@pst, 확실히, 마술 아니지만 (모두 코드 일뿐입니다 :) 셸에는 특별한 것이 있습니다.
sarnold 2011


10

-각 명령이 의미하는 바를 정확히 의미합니다. 몇 가지 일반적인 규칙이 있으며 다른 답변에서 대부분의 예를 보았지만 100 % 보편적 인 규칙은 없습니다.

[정보] 아무것도 마법이 -문자까지 쉘에 관한 한 (점을 제외 쉘 자체, 그리고 일부는 같은 명령 내장 cd하고 echo, 그것은 기존의 방법으로 사용). 일부 문자가 같은 \, '그리고 ", 있는 나타나는 곳마다 특별한 의미를 가진 "마법". 이것은 "쉘 메타 문자"입니다. -그렇지 않습니다.

주어진 명령을 사용하는 방법을 참조하려면 -, 그 명령에 대한 문서를 읽어 .


7

마술은 컨벤션에 있습니다. 수천 년 동안 사람들은 옵션을 인수와 구별하기 위해 '-'를 사용했으며 파일 이름에 '-'를 사용하여 stdin 또는 stdout을 적절하게 의미했습니다. 컨벤션의 힘을 과소 평가하지 마십시오!


문자 적 표현에서 말하는 방식을 분별하는 사람들의 능력을 과대 평가하지 마십시오. 이것은 수천 년 동안 진행되지 않았습니다.
tripleee

1
@tripleee-사실이지만 수십억 초 동안 계속되었습니다. ;-)
David R Tribble

5

프로그램의 표준 입력 스트림을 사용하는 것을 의미합니다.

의 경우 cd다른 것을 의미합니다. 이전 작업 디렉토리로 변경합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.