리눅스 tar 하이픈(-) 옵션 없어도 명령어 되던데 왜 쓰나

tar 명령어를 사용할 때 보통은 옵션에 마이너스(?) or 하이픈 ‘-‘ 를 붙여서 사용하는데

[root@localhost]# tar -cvf my.tar my_directory/

하지만 ‘-‘ 옵션을 안써도 잘 되던데..

[root@localhost]# tar cvf my.tar my_directory/

왜 굳이 ‘-‘ 옵션을 써야할까?

1.하이픈(-) 옵션을 사용하는 이유

‘-‘ 는 명령어와 옵션 매개변수를 명확하게 구분하기 위해 사용됩니다.
그것이 표준 컨벤션에 더 가깝다고 생각합니다.

2.하이픈(-) 옵션의 역사

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

예를 들면 tar의 명령옵션처럼
tar “something“f “file operated on” “paths of files to manipulate”

혼란을 피하기 위한 첫 번째 시도로 tar와 오래된 flags-arguments 스타일의 몇 가지 다른 프로그램은
flag를 ‘-‘로 구분할 수 있었지만, 우리 대부분의 고인물들은 단순히 그것을 무시했습니다.

일부 다른 명령어는 플래그, 등호, 경로 이름, 인수 및 배 트리의 파티션을 사용하는 dd(1)과 같이 더 복잡한 명령줄 구문을 가지고 있습니다.
BSD와 이후 버전의 유닉스에서는 ‘-‘로 표시된 단일 문자 flag로 수렴되었지만 몇 가지 문제가 발생하기 시작했습니다

1) 그 flag들은 기억하기 어려울 수 있습니다
2) 때때로 당신은 실제로 ‘-‘이 있는 이름을 사용하고 싶었습니다
3) 특히 GNU 도구의 경우 가능한 플래그의 수에 따라 제한이 가해지기 시작했습니다.
그래서 GNU 도구는 –output과 같은 GNU 긴 옵션을 추가했습니다.

그 이후 Sun은 여분의 ‘-‘가 중복된다고 보고 ‘-‘와 함께 ‘–‘의 flag를 사용하기 시작했습니다.
그리고 그렇게 해서 지금의 엉망이 되었습니다.

3.하이픈(-)과 하이픈 2개(–) 옵션의 차이

1) 리눅스 ‘-‘ 옵션

short options 는 POSIX standard (getopt())
-a, -b, -c, -abc 등등 싱글옵션을 쓸 때 사용한다.

2) 리눅스 ‘–‘ 옵션

long options 는 GNU extension (getopt_long())
–name=arg 같은 다중옵션을 쓸 때 사용한다.

4. 결론

tar 에서는 마이너스(-) 옵션을 써도 되고 안써도 되지만
표준 포멧이 (-) 옵션을 쓰는 것이니까
웬만하면 가독성 좋게 쓰도록 하자.

참조: https://unix.stackexchange.com/questions/13573/why-use-superflous-dash-to-pass-option-flags-to-tar

Leave a Comment