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

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

그냥 kubectl예시로 사용해서 말씀드리자면

kubectl run --image nginx ...

그리고

kubectl run --image=nginx ...

둘 다 작동합니다.

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

답변1

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

즉,많은 경우에, "긴" 옵션의 값(예: 로 도입됨 )은 옵션 이름과 값 사이(예: ) --option_name로 지정되는 반면, 단일 문자 옵션의 경우 플래그와 값을 공백으로 구분하는 것이 더 일반적입니다. , 와 같은 또는 분리를 전혀 사용하지 않습니다( 에서와 같이 ).=--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

보시다시피, 값은 "짧은" 형식(예: -d) 을 사용할 때 옵션 스위치에서 공백으로 구분되지만 ="긴" 형식(예: --date)을 사용할 때는 공백으로 구분됩니다.

편집하다

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

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

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

답변2

일반적으로 명령줄 프로그램의 경우 스위치와 값 사이에 등호가 허용/필수되는지 여부에 대한 규칙이 있습니까?

아니요, 없습니다. 오픈 소스 세계와 일반적인 컴퓨팅에는 많은 경쟁 표준이 있습니다(의무적 xkcd) 누구나 원할 때마다 새로운 규칙과 표준을 생각해 낼 수 있습니다. POSIX 유틸리티 인수 구문=예를 들어 전혀 언급하지 않습니다 .남자 getopt그것을 언급합니다. 실제로는 모든 종류의 명령줄 프로그램을 접할 수 있습니다:

=공백 뒤나 뒤에 긴 옵션 값을 취하는 것 :

$ 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]

다음의 가치를 취하지 만 또는 =옵션을 취하지 않는 것 :---

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

주어진 명령줄 프로그램이 주어진 방식으로 입력을 받아들이는 데에는 여러 가지 이유가 있을 수 있습니다. 작성자의 비전, 아무도 신경 쓰지 않기 때문에, 작성자는 다른 사람이 이미 표준을 제시했다는 것을 몰랐기 때문에, 프로그램이 다음으로 포팅되었기 때문입니다. 완전히 다른 규칙을 사용하는 다른 운영 체제의 Unix 또는마치 그랬던 것처럼 보이도록 만들어졌어..

관련 정보