foo
세 개의 단일 문자 스위치 a
, b
및 가 필요한 명령이 있다고 가정합니다 c
. 이러한 스위치는 모두 다양한 옵션으로 제공됩니다.
즉foo -a opt1 -b opt2 -c opt3
스위치가 단일 블록에 있으면 어떤 일이 발생합니까(또는 발생해야 합니까)?
즉foo -abc opt1 opt2 opt3
무슨 일이 일어나는지에 대한 표준 관행이 있습니까(즉 , c
gets , gets , 오류 발생 등), 아니면 이를 해석하는 것이 프로그램에 달려 있습니까?opt1 opt2 opt3
a
bc opt1 opt2 opt3
답변1
사용된 프로그램에서 매개변수를 승인 getopt()
하면 매개변수를 승인 하고 옵션이 아닌 , 를 승인합니다 . 매개변수가 허용 되지 않으면 동작은 매개변수가 허용되는지 여부에 따라 달라 집니다 .-a
foo -abc opt1 opt2 opt3
-a
bc
opt1
opt2
opt3
-a
-b
-c
이것POSIX 설명getopt()
이 점에 대해서는 비교적 명확합니다.
이 옵션이 인수를 취하는 경우,선택 항목 가져오기()는 변수를 설정해야합니다옵션 매개변수다음과 같이 옵션 매개변수를 가리킵니다.
- 옵션이 요소가 가리키는 문자열의 마지막 문자인 경우정액, 그 다음에옵션 매개변수다음 요소를 포함해야 합니다정액, ...
- 그렇지 않으면,옵션 매개변수이 요소의 옵션 문자 뒤에 오는 문자열을 가리켜야 합니다.정액...
하지만 그렇다고 해서 다르게 작업을 수행하는 프로그램이 없을 수도 있다는 말은 아닙니다. 인수를 전달하는 전통적인 방법은 tar
모든 플래그를 패키지의 첫 번째 명령줄 인수에 넣고 모든 필수 인수를 다음 명령줄 인수의 옵션에 순서대로 넣는 것입니다.
이 예에서는FreeBSD 타르 매뉴얼:
tar tbf 32 file.tar
and b
플래그는 인수를 허용합니다. 여기서는 and f
입니다 . 물론 이 패턴은 매개변수가 다음과 같다는 점에서 매우 독특합니다.32
file.tar
아니요앞에 대시가 있습니다. 대시를 사용하면 getopt
- 와 유사한 구문 분석이 발생합니다. 이는 tar xfv
과 tar -xfv
가 다르다는 것을 의미합니다( -f
인수가 필요하기 때문입니다).
-abc
물론 일부 프로그램은 전체 단어로 구성된 옵션을 사용하지만 여전히 대시로 시작하므로 문제의 프로그램을 알지 못하면 옵션이 하나인지, 옵션이 세 개인지, 아니면 매개변수가 있는 옵션 하나인지 알 수 없습니다 . 긴 옵션 앞에 GNU 스타일의 이중 대시를 사용하면 최소한 구별이 명확해집니다.
답변2
지침 5:"-" 구분 기호 뒤에 결합하는 경우 옵션 인수가 없는 하나 이상의 옵션과 옵션 인수가 있는 최대 하나의 옵션이 허용되어야 합니다.
따라서 POSIX 호환 유틸리티에서 foo -abc opt1 opt2 opt3
이는 다음을 의미합니다.
-a
bc
옵션 인수가 있는 옵션.opt1
, 표준 매개변수로 사용opt2
됩니다 .opt3
foo
유틸리티가 POSIX 규격이 아닌 경우 해당 설명서에서 이러한 상황을 명확히 해야 합니다.
답변3
그것은 모두 입력을 해석하는 프로그램에 따라 다릅니다.
foo -abc
일반적으로 옵션이 인수를 사용하지 않는 한 짧은 옵션(예: )을 함께 연결할 수 있습니다 . 이는 관례에 따른 것이며 표준 인수 구문 분석 라이브러리(예: getopts)가 이를 지원하기 때문입니다.
그러나 링크 단축 옵션을 지원하지 않는 일반적으로 사용되는 프로그램은 없습니다.