명령 매개변수 및 인수 - 올바른 입력 방법은 무엇입니까?

명령 매개변수 및 인수 - 올바른 입력 방법은 무엇입니까?

이것은올바른 방법- 매개변수와 형식 매개변수를 공백으로 구분합니까?

그리고주장을 분리해야 할까요, 아니면 함께 유지해야 할까요?

예:

<command> -D 192.168.0.100 -p 80
<command> -cvvfz

또는:

<command> -D192.168.0.100 -p80
<command> -c -vv -f -z

일부 프로그램은 하나의 "스타일"만 허용합니까, 아니면 전혀 중요합니까?일반적으로 말하면?

답변1

일부 프로그램하다한 가지 스타일만 허용합니다. 둘 중 하나입니다.

사용되는 모든 항목은 매개변수가 있는 옵션을 getopt()허용해야 -xfoo합니다 . 그러나 모든 프로그램이 .-x foo-xgetopt()임의로 선택할 수 있는매개변수는 또 다른 문제입니다. 적용되지 않을 수도 있지만 매개변수 없이 옵션을 제공하기 어렵기 때문에 -x foo필요할 수도 있습니다 .-xfoo

어떤 것을 "사용해야" 하는지는 선호의 문제이며 모든 사람이 자신의 의견을 가질 가능성이 높습니다.

답변2

일부 프로그램에는 스타일이 필요하지만 일부 프로그램에는 그렇지 않습니다. 예를 들어:

mysql -ph 10.1.1.1  

비밀번호를 사용하여 연결을 시도합니다 mysql.localhosth

mysql -p -h 10.1.1.1

다른 한편으로는 연결되어 10.1.1.1비밀번호를 묻는 메시지가 표시됩니다.

답변3

이는 유틸리티에 의해 정의됩니다. 일부는 하나 또는 두 가지 양식을 모두 허용합니다.

존재하다POSIX 유틸리티 규칙, 이 템플릿은 매개변수 구문 섹션에 제공됩니다.

utility_name[-a][-b][-c option_argument]
    [-d|-e][-f[option_argument]][operand...]

옵션 매개변수가 선택사항이 아닌 경우에는 옵션 매개변수를 공백 문자로 옵션과 구분해야 합니다. 이 경우 구분 기호를 사용하면 안 됩니다.하지만그 다음에...

과거 애플리케이션의 지속적인 작동을 보장하기 위해 POSIX.1-2017에는 몇 가지 예외가 있습니다.

유틸리티 구문 지침의 다음 섹션에서 지침 7은 옵션 매개변수가 선택 사항이 되어서는 안 된다고 명시하고 있습니다.

이 모든 혼란에서 한 가지 분명한 것은 플래그와 매개변수 사이의 공백에 대한 명확한 규칙이 없다는 것입니다.

정보 전달의 구체적인 예:

Syntax error                        Syntactically correct
xclip -ir <<< ABC                   xclip -i -r <<< ABC
xkbcomp -I /home/user "main" :0     xkbcomp -I/home/user "main" :0
rename -e's/f/x/' f                 rename -e 's/f/x/' f

참고로 공지 지침 3에는 "각 옵션 이름은 단일 영숫자 문자여야 합니다"라고 명시되어 있습니다. 다중 문자 옵션 이름을 사용하는 많은 유틸리티 예제를 생각해 볼 수 있습니다.

답변4

프로그램에 따라 다르지만일반적으로 말하면옵션과 해당 값 사이에는 공백이 있어야 합니다.

일부 응용프로그램/유틸리티는 --option=value매개변수를 허용하는데, 이 경우 공백이 있을 수 없습니다.

관련 정보