왜 옵션 플래그를 tar에 전달하기 위해 superflous 대시 (-)를 사용합니까?


35

디렉토리에 tar 파일의 작성하려면 tar와 명령을 compress, verbose그리고 file옵션에 따라서 입력 할 수 있습니다 :

$ tar -cvf my.tar my_directory/

그러나이 방법으로도 작동합니다.

 $ tar cvf my.tar my_directory/

즉, 옵션 앞에 대시 (-)가없는 것입니다. 왜 옵션 목록에 대시 (-)를 전달 하시겠습니까?


답변:


43

UNIX 응용 프로그램에서 역사적으로 사용 된 옵션에는 여러 가지 패턴이 있습니다. tar 와 같은 몇 가지 오래된 것들은 위치 체계를 사용합니다.

명령 옵션 인수

예를 들어 tar는

tar * something * f "파일에서 작동 된 파일" * "조작 할 파일 경로"*

혼동을 피하기위한 첫 번째 시도에서 tar 와 old flags-arguments 스타일을 가진 몇 가지 다른 프로그램에서는 대시로 플래그를 구분할 수 있었지만 대부분의 노인들은 단순히 무시했습니다.

다른 일부 명령에는 플래그, 등호, 경로 이름, 인수 및 배 트리의 파트 리지를 모두 사용하는 dd (1) 과 같이보다 복잡한 명령 줄 구문이 있습니다.

BSD 및 이후 버전의 유닉스에서는 이것이 '-'로 표시된 단일 문자 플래그로 다소 수렴되었지만 몇 가지 문제가 발생하기 시작했습니다.

  • 깃발은 기억하기 어려울 수 있습니다
  • 때로는 실제로 '-'와 함께 이름을 사용하고 싶었습니다.
  • 특히 GNU 도구의 경우 가능한 많은 플래그로 인해 제한이 시작되었습니다. 따라서 GNU 도구는와 같은 GNU 긴 옵션을 추가했습니다 --output.

그런 다음 Sun은 여분의 '-'가 중복되고 단일 '-'로 긴 스타일 플래그를 사용하기 시작했다고 결정했습니다.

그리고 그것이 지금 엉망이 된 방법입니다.


9
" 나의 배나무의 산마루" 건조한 시도보다 낫다. 네가 이겼다.
dmckee

1
좋은 역사적 맥락.

1
많은 X 프로그램 (예 : Xorg의 X 포함)이 단일 스타일의 긴 스타일 플래그를 사용합니다 -. 그게 태양인가요?
mattdm

1
'배나무의 산담'의 의미는 무엇입니까? (유용하고 이해하기 쉬운 링크를 가질 수 있습니까?)
plhn

1
@plhn 관용구. 전통적인 영어 크리스마스 캐롤 "크리스마스 12 일"에는 "배나무의 산마루"로 끝나는 사치스러운 선물들이 많이 있습니다. 긴 사치스러운 목록을 제안합니다.
Charlie Martin

8

tar -c -f foo -v -B file1 file2 file3명령 행 끝에 옵션과 매개 변수 또는 파일 이름을 구별하기 위해 대시가 필요한 표준 유닉스 방식으로 tar 옵션을 제공 할 수 있습니다 . 또는 첫 번째 인수에 모든 옵션을 함께 넣을 수 있습니다.이 경우 대시는 선택 사항입니다.

그런 다음 psSysV-ish 옵션을 사용하는 경우 대시를 사용하고 BSD-ish 옵션을 사용하는 경우 대시를 사용하지 않으면 더 혼란 스럽습니다.

그리고 이야기조차 할 수 없습니다 find.


2

대시는 옵션 매개 변수 이름과 값을 명확하게하기 위해 사용됩니다. 나는 그것이 표준 관습에 가깝다고 생각합니다.


1
best-practice태그 가 추가 될 수 있다고 생각했기 때문에 태그 를 추가하려고 했습니다.

1
@Milktrader, 모범 사례에 대해 이야기 할 때 어려운 질문입니다. 표준 규칙을 따르는 것이 실제로 가장 좋은 방법이지만, 귀하의 경우에 그것을 원하든 명확하지 않습니다. 시나리오에 따라 다릅니다. 쉘에서 몇 가지 빠른 명령을 해킹하고 있다면 신경 쓰지 않아도되지만 라이브러리를 작성하는 경우이 라이브러리의 사용 방법을 제어 할 수 없으므로 잘 설정된 규칙을 따르는 것이 중요합니다. 클라이언트에 의해. 이 경우 가능한 모든 경우를 다루어야하며 옵션 이름과 값을 명확하게 구분하는 것이 중요합니다.

-1

유닉스 명령 행 옵션을 사용하기 위해 최대 4 개의 규칙이 있습니다 :

  1. -o -p -t (각 옵션 앞에 대시)
  2. -opt (옵션 세트 앞에 대시)
  3. 옵트 (옵션 세트 이전에는 대시 없음)
  4. --long-option (옵션 이름 앞에 이중 대시)

예를 들면 다음과 같습니다.

$ tar -x -v -z -f package.tar.gz
$ tar -xvzf package.tar.gz
$ tar xvzf package.tar.gz
$ tar --extract -verbose -gzip -file package.tar.gz

1
이 규칙은 tar에만 적용됩니까? LS는 어때? ls lrt는 작동하지 않지만 ls -lrt / ls -l -r -t는 작동합니다. 왜 그래?
Shashank Vyas

모든 명령에 대해 네 가지 규칙이 작동해야합니다.
jonasjacek

2
아닙니다. 다른 날에는 rm rf <filename>을 시도했지만 작동하지 않습니다.
Shashank Vyas

-2

선행 빼기 / 대시 기호 (-)를 사용하면 옵션을 정확한 순서로 유지해야합니다. 빼기 순서없이 옵션을 변경할 수 있습니다.

예를 들면 다음과 같습니다.

# tar -xvf yourfile.tar
# tar vxf yourfile.tar

이 답변은 반은 맞지만 AFAIK f는 순서가 중요한 인수를 취하는 플래그 일뿐 입니다.
Mikel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.