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