쉘 명령에서 단일 대시 및 이중 대시 플래그 사이의 차이점은 무엇입니까?


70

나는 셸에서 일하는 것이 처음이며 이러한 명령의 사용법은 임의적입니다. 하나의 플래그에 단일 대시가 있고 다른 플래그에 이중 대시가있는 이유가 있습니까?


그것은 POSIX 표준에 의해 통제되어야한다 : iam.ubc.ca/guides/javatut99/essential/attributes/_posix.html
cjc

그 링크는 이제 404 @cjc입니다. (더 안정적인 링크는 en.wikipedia.org/wiki/POSIX 일
Bernhard Hofmann

답변:


110

하나의 하이픈 뒤에 여러 개의 단일 문자 플래그가 올 수 있습니다. 이중 하이픈은 단일 다중 문자 옵션 앞에 붙습니다.

이 예제를 고려하십시오.

tar -czf

이 예에서는 -czf3 개의 단일 문자 플래그를 지정 c, zf.

이제 다른 예를 보자.

tar --exclude

이 경우 --exclude라는 단일 다중 문자 옵션을 지정 exclude합니다. 이중 하이픈 그 보장, 명령 줄 인수들의 차이를 tar그와 같은 해석 exclude보다는 조합 e, x, c, l, u, d,와 e.


1
@kylex, 아니요. 단지 "c"라는 긴 옵션이 없기 때문에-는 단일 문자 옵션이 아니라 긴 옵션을 의미합니다.
psusi

13
때로는 긴 명령조차도 단일 대시 일 수 있습니다. 예를 들어 'cdrecord'는 모든 단일 대시 명령 (-eject -dao ...)을 사용합니다. 그것은 모두 프로그램에 달려 있지만, 대부분 (!)은 단일 문자 및 다중 문자 (긴) 명령에 사용됩니다
mulaz

8
@mulaz, 그렇습니다. cdrecord는 꽤 많은 바보 같은 일을합니다.
psusi

10
또한 스스로 사용하는 것은 일반적으로 옵션의 끝을 나타냅니다. 자세한 정보는 여기를 참조하십시오 : unix.stackexchange.com/questions/11376/…
Sirex

3
@killjoy, 무지 또는 선택을 통해 해당 프로그램의 저자는 물론 관습을 따르지 않았기 때문에. cdrecord위의 의견에서 몇 년 전에 언급 한 것처럼 .
psusi

17

그것은 모두 프로그램에 달려 있습니다. 일반적으로 "-"는 '짧은'옵션 (한 글자, -h)에 사용되고 "-"는 "long"(er) 옵션 (--help)에 사용됩니다.

일반적으로 짧은 옵션을 결합 할 수 있습니다 ( "-h -a"는 "-ha"와 동일)

유닉스 계열 시스템에서 ASCII 하이픈-마이너스는 일반적으로 옵션을 지정하는 데 사용됩니다. 문자 뒤에 보통 하나 이상의 문자가옵니다. 문자가없는 단일 하이픈 빼기 인수는 일반적으로 프로그램이 표준 입력에서 오는 데이터를 처리하거나 표준 출력으로 데이터를 보내도록 지정합니다. 일부 프로그램에서는보다 설명적인 옵션 이름이 사용되는 "긴 옵션"을 지정하기 위해 두 개의 하이픈 (-) 문자 (-)가 사용됩니다. 이것은 GNU 소프트웨어의 일반적인 기능입니다.

출처


2
그렇다면 왜 java -version과 ant -version입니까?
killjoy

7

정말 컨벤션입니다. 그러나 파서는 프로그램에 전달 된 옵션에 대해보다 효율적으로 알 수 있습니다. 또한 프로그램의 인수를 구문 분석하는 데 도움이 getopt(3)되는 비표준 과 같은 이러한 명령을 구문 분석하는 데 도움이되는 깔끔한 유틸리티가 있습니다 getopt_long(3).

다른 답변 에서처럼 여러 개의 짧은 옵션을 결합 할 수 있기 때문에 tar -xzf myfile.tar.gz좋습니다.

에 대해 "리사"인수가 있었다면 ls, 아마 입력 할 다른 의미가있는 것 ls -lisa이상을 ls --lisa. 전자는있다 l, i, s, 및 a매개 변수가 아닌 단어.

실제로, ls -l -i -s -a와 정확히 동일한 의미로 쓸 수는 ls -lisa있지만 프로그램에 따라 다릅니다.

이 규칙을 따르지 않는 프로그램도 있습니다. 특히 내 시야에, dd그리고 gcc.


3

단일 대시가있는 짧은 옵션과 이중 대시가있는 긴 옵션

짧은 옵션은 단일 인수로 결합 될 수 있습니다.

for example: ls -lrt #instead of ls -l -r -t

단일 대시로 긴 옵션을 허용하면 모호성이 발생합니다. 이를 해결하기 위해 긴 옵션에는 이중 대시를 사용합니다.

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