고쳐 쓰다:

고쳐 쓰다:

foo다음 형식의 선택적 명령줄 인수를 사용하는 스크립트가 있습니다 .

foo -A <NUM> -B <NUM> -i

또는 공백 없이:

foo -A<NUM> -B<NUM> -i

여기서 NUM은 정수입니다. 스크립트는 파일 이름/디렉토리를 완성해서는 안 됩니다.

다음과 같은 완료 규칙이 있습니다.

#compdef foo

 local -a args

_arguments -S \
    '*-A' \
    '*-B' \
    '*-i'

-A완성이 옵션을 알 거나 -B자체가 불완전하지만 완성을 계속하려면 숫자가 필요하도록 하려면 무엇을 추가해야 합니까 ?

다른 스크립트에서도 비슷한 상황이 발생하는데 유일한 차이점은 사용된 옵션입니다 =.

foo --port=<PORT>

이것도 어떻게 할 수 있나요?

고쳐 쓰다:

이상한 문제가 발생했습니다. 제가 하고 있는 일은 다음과 같습니다.

#compdef foo

_arguments -S \
    '-A+:' \
    '-B+:' \
    '-i'

어떤 이유로 첫 번째 매개변수는 A무시됩니다. 즉:

foo -<TAB>
-B -i

하지만 다른 옵션을 앞에 놓으면A

#compdef foo

_arguments -S \
    '-x+:' \
    '-A+:' \
    '-B+:' \
    '-i'

그러면 해당 항목 A이 표시될 뿐만 아니라 또 다른 새로운 옵션도 표시됩니다.

foo -<TAB>
-A  -B  -i  -x

여기서 무슨 일이 일어나고 있는 걸까요?

답변1

_arguments이 옵션에 인수가 필요하도록 지시합니다 . 옵션 뒤의 옵션은 +옵션이 같은 단어에 있을 수도 있고 별도의 단어에 있을 수도 있음을 나타냅니다. 첫 번째 부분 이후의 부분 :은 일치가 생성될 때 표시되는 메시지이며, 여기서는 아무것도 완료되지 않으므로 의미가 없습니다. 두 번째 열 다음 부분은 완성 기능이며 아마도 없을 것입니다.

_arguments -S : \
    '*-A+:number:' \
    '*-B+:number:' \
    '*-i'

긴 옵션의 경우 와 가 모두 허용되거나 하나만 허용되는 경우 옵션 이름 =뒤가 아닌 :옵션 이름 뒤에 배치됩니다. 네트워크(TCP/UDP) 포트의 경우 명령이 포트 이름을 허용하면 완성 기능으로 사용합니다.--port 123--port=123=---port=123_port

관련 정보