명령어 옵션(option) 플래그(flag) 클러스터(cluster)
플래그의 규칙
1. 모든 옵션의 앞에는 대시( - )문자를 붙인다.
2. 대시 다음에는 인자 없이 여러 옵션을 붙일수 있다.
-a - b -c = -abc
3. 첫째 옵션 다음에 탭이나 공백을 두고 붙여야한다.
-a arg는 맞지만 -aarg는 틀림
4. 욥션에 인자가 있다면 생략할 수 없다.
5. 한 명령어에서 여러개의 인자를 사용할 경우 그 인자를 콤마, 공백문자,
탭 또는 따옴표로 구분해야한다. 즉
-a xxx,yyy,zzz 또는 -a "xxx yyy zzz"
6. 모든 옵션은 파일명 뒤에 있어야한다.
7. 옵션의 끝을 나타내기 위해 대시를 중복해서 쓸 수 있다 (--) 중복대시가
나오면 그 뒤에 나오는 인자는 대시로 시작해도 된다.
8.옵션의 순서는 아무런 상관이 없다.
9.옵션을 제외한 인자의 순서는 명령어에 따라서 결정되며, 명령어가 인자에
순서를 두었다면 중요한 영향을 끼칠수 있다.
10. 공백문자 앞 뒤에 오는 대시는 표준입력을 나타낸다.
위에 님이 말씀하신 - 는 표준출력장치로 출력됩니다. (즉 모니터)
5번규칙만 이상하실텐데요 5번규칙은 System V초기버전은 getopt라는
라이브러리를 제공합니다. 이것은 프로그램에 이 규칙을 강제로 적용하도록
해서 명령행을 쉽게 분석할 수 있게 해줍니다.
자세한것은 man getopt라고 하시면됩니다.
출처 - http://kldp.org/node/21293
===================================================================================
Zend_Console_Getopt 클래스는 명령행 애플리케이션에서 옵션들과 인수들의 구문 분석을 도와줍니다.
사용자는 애플리케이션을 실행할 때 명령행 인수를 지정할 수 있습니다. 이러한 인수는 애플리케이션에 있어서 어떠한 의미를 가지고, 어떠한 방법으로 행동을 변경하거나 자원을 선택하거나 매개변수를 설정하거나 합니다. 많은 옵션들이 관례가 되고 있는 의미가 있습니다. 예를 들어 "--verbose"라는 옵션은 많은 애플리케이션에서 부가적인 출력 내용을 가능하게 합니다. 다른 옵션들은 애플리케이션에 따라서 의미가 다른 것도 있습니다. 예를 들어 "-c"라는 옵션은 grep, ls 및 tar에서 각각 다른 기능을 나타냅니다.
아래에서 용어들의 정의를 합니다. 이러한 용어는 여러가지 의미로 이용되지만, 이 문서에서는 여기에서 정의한 의미로 사용합니다.
"인수(argument)" : 명령어 뒤에 나오는 문자열. 인수에는 옵션이 붙기도 하고 붙지 않기도 합니다. 인수에 의해, 명령어의 조작 대상이 되는 자원을 지정합니다.
"옵션(option)" : 그 명령어의 기본 행동을 어떠한 방법으로 변경하는 것을 의미하는 인수
"플래그(flag)": 옵션의 첫 부분에서, 그 옵션의 목적을 나타내는 것. 플래그 앞에는 관습적으로 하나 또는 두 개의 대시("-" 또는 "--")를 붙입니다. 하나의 대시를 붙이는 것은, 한 문자의 플래그 또는 한 문자 플래그의 클러스터인 경우입니다. 두 개의 대시를 붙이는 것은 복수 문자 플래그의 경우입니다. 긴 형식의 플래그는 클러스터화 할 수 없습니다.
"매개변수(parameter)" : 옵션의 두번째 부분; 플래그와 함께 사용하는 데이터의 값을 지정합니다. 이것은 주어진 옵션에 적용할 수 있는 경우에 한합니다. 예를 들어, 많은 명령어는 "--verbose"옵션을 받아들이지만, 일반적으로 이 옵션은 매개변수를 가지지 않습니다. 그러나, "--user"와 같은 옵션은 거의 대부분 그 뒤에 매개변수가 필요합니다.
매개변수는 플래그 인수 다음에 다른 인수로서 지정할 수도 있고, 또는 동일한 인수 문자열의 일부로서 지정할 수도 있습니다. 이 경우는 플래그와 매개변수를 등호("=")로 연결합니다. 후자의 형식은 긴 플래그에서만 지원하고 있습니다. 예를 들어, -u username, --user username, 그리고 --user=username는 Zend_Console_Getopt에 의해 지원되는 형식입니다.
"클러스터(cluster)" : 하나의 대시 뒤에 문자열을 연결하고, 한 문자 인수를 조합한 다중 단일 문자 플래그. 예를 들어 "ls -1str"는 네 개의 플래그들의 클러스터를 사용하고 있습니다. 이 명령어는 "ls -1 -s -t -r"와 동일합니다. 클러스터화 할 수 있는 것은 한 문자의 플래그만으로, 긴 형식의 플래그는 클러스터화 할 수 없습니다.
예를 들어 "mysql --user=root mydatabase"에 있어서 "mysql"는 명령어, "--user=root"는 옵션, "--user"는 플래그, "root"는 옵션에 대한 매개변수가 됩니다. 또, "mydatabase"는 이 정의에 의하면 인수이지만 옵션은 아닙니다.
Zend_Console_Getopt는, 플래그가 애플리케이션에서 사용 가능한 지 선언, 무효인 플래그가 지정되었을 경우의 에러 및 사용법 표시, 사용자가 지정한 플래그를 애플리케이션에 보고하는 인터페이스를 제공합니다.
Getopt는 애플리케이션 프레임워크가 아닙니다
Zend_Console_Getopt는 플래그나 매개변수의 의미를 해석하는 것은 아닙니다. 또 애플리케이션의 워크플로우를 구현하거나 코드를 기동하지도 않습니다. 그러한 처리는 애플리케이션 내에서 스스로 구현해야만 합니다. 명령행을 구문 분석해서, 유저가 지정한 옵션을 객체 지향의 메소드에 질의를 보내도록 Zend_Console_Getopt 클래스를 사용할 수 있습니다. 그러나, 그 정보를 기초로 애플리케이션으로 어떠한 처리를 수행하는 것은 다른 PHP 클래스의 몫입니다.
다음 섹션에서는 Zend_Console_Getopt의 사용법을 설명합니다.