명령줄 옵션은 옵션 이름과 값 사이에 등호를 사용합니까?

명령줄 옵션은 옵션 이름과 값 사이에 등호를 사용합니까?

kubectl예시로 알아 봤는데

kubectl run --image nginx ...

그리고

kubectl run --image=nginx ...

둘 다 유효합니다.

일반적으로 명령줄 프로그램의 경우 옵션 이름과 값 사이에 등호가 허용되거나 필요한지 여부에 대한 규칙이 있습니까?

답변1

일반적으로 명령줄 인수를 해석하는 방법의 구현은 전적으로 프로그래머의 재량에 달려 있습니다.

즉 말하자면,많은 경우에, "긴" 옵션의 값(예: 가져오기)은 옵션 이름과 값 사이에 (즉)로 지정되는 --option_name반면, 단일 문자 옵션의 경우 플래그와 값을 공백으로 구분하는 것이 더 일반적입니다. 또는 구분 기호를 전혀 사용하지 마십시오(like).=--option_name=value-o value-oValue

GNU 날짜 유틸리티 매뉴얼 페이지의 예:

  -d, --date=STRING
        display time described by STRING, not 'now'
  -f, --file=DATEFILE
        like --date; once for each line of DATEFILE

보시다시피, "짧은" 형식(예: )을 사용하는 경우 값은 옵션 switch 에서 공백으로 구분되는 -d반면, ="긴" 형식(예: --date)을 사용하는 경우 값은 공백으로 구분됩니다.

편집하다

스티븐 키트(Stephen Kitt)가 지적했듯이,GNU 코딩 표준명령줄 옵션을 사용 getopt하고 구문 분석하는 것이 좋습니다 . getopt_long매뉴얼 페이지 상태 getopt_long:

--arg=param긴 옵션은 또는 형식의 인수를 사용할 수 있습니다 --arg param.

따라서 이 기능을 사용하는 프로그램은 두 가지 형식을 모두 허용합니다.

답변2

일반적으로 명령줄 프로그램의 경우 스위치와 값 사이에 등호를 허용하거나 요구하는지 여부에 대한 규칙이 있습니까?

아니요, 없습니다. 오픈 소스 세계와 일반적인 컴퓨팅에는 많은 경쟁 표준이 있습니다(강제 xkcd) 누구나 언제든지 새로운 규칙과 표준을 제안할 수 있습니다. POSIX 유틸리티 인수 구문=예를 들어 while 은 전혀 언급되지 않습니다.남자들은 선택권을 갖는다그것을 언급하십시오. 실제로는 다양한 명령줄 프로그램을 접할 수 있습니다.

=공백 뒤 또는 뒤에 긴 옵션 값을 취하는 옵션은 다음과 같습니다.

$ touch a b c d
$ ls --format=verbose
total 0
-rw-r--r-- 1 ja users 0 Mar 17 14:39 a
-rw-r--r-- 1 ja users 0 Mar 17 14:39 b
-rw-r--r-- 1 ja users 0 Mar 17 14:39 c
-rw-r--r-- 1 ja users 0 Mar 17 14:39 d
$ ls --format verbose
total 0
-rw-r--r-- 1 ja users 0 Mar 17 14:39 a
-rw-r--r-- 1 ja users 0 Mar 17 14:39 b
-rw-r--r-- 1 ja users 0 Mar 17 14:39 c
-rw-r--r-- 1 ja users 0 Mar 17 14:39 d

긴 옵션 값이 뒤에 올 필요는 없지만 =공백이 필요한 것:

$ readelf  -a main | grep  'program interpreter'
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
$ patchelf --set-interpreter=fake main
patchelf: getting info about '--set-interpreter=fake': No such file or directory
$ patchelf --set-interpreter fake main
$ readelf  -a main | grep  'program interpreter'
      [Requesting program interpreter: fake]

or 옵션을 =취하지 않고 나중에 값을 취하는 것 :---

dd if=/dev/urandom of=~/Desktop/test.txt bs=1M count=3

주어진 명령줄 프로그램이 주어진 방식으로 입력을 받아들이는 데는 여러 가지 이유가 있을 수 있습니다. 작성자의 비전, 아무도 신경 쓰지 않기 때문, 작성자는 다른 사람들이 표준을 생각해 냈다는 사실을 모르기 때문, 프로그램이 Unix로 포팅되었기 때문입니다. 운영 체제마다 규칙이 완전히 다르거나벌써 예전같아.

관련 정보