Re: [問題] Extra option與Illegal option的差別
為了行文方便定義一下用語
名詞:
token: 命令名稱後面跟的東西 用空格切開後的字串集
flag: 形如 -* 的 token
argument: 沒有 flag 跟在前面的 token
option: 某些 flag 要求後面要緊跟著一個引數 令其為 option of -(flag name)
可能會圖方便只寫 option
形容詞:
optional: 被方括弧括起來的東西
essential: 被角括弧括起來的東西
==============================================================================
以下要用 MTDelete (mtd) 舉例 所以先分析一下它的 tokens:
Argument: 沒有
-Index : essential flag 需要 option
-Random : essential flag 需要 option
-Array : optional flag 不需要 option
特殊規定: -i 和 -r 為二選一
==============================================================================
我的認知大概是這樣:
Illegal:
1.如果一個 argument 或 flag 不在命令可能接受的範圍內就是 Illegal
例如
mtd -a -i 2 8
經過解析的結果
-a 是 沒有 option 的 flag
-i 是 有 option=2 的 flag
8 是 argument
因為 mtd 沒有 argument
所以 8 是 Illegal
2.如果一個 argument 或 option (of flag) 的型態錯誤
例如
mtd -a -i k
因為 k 不是數字 違反 option of -i 的規定 所以是 Illegal
Extra:
1.如果一個 argument 或 flag 可能被命令接受
但數量上超過了命令的需求 則是 Extra
例如
mtd -a -i 2 -a
則 -a 就是可以被接受但是多打了一個 所以第二個 -a 是 Extra
Note: 如果是像 mtd -i 2 -r 這樣 因為是二選一 所以後面那個就會視為多出來
Missing:
1.如果輸入的命令經解析認為某個 flag 沒有 option 但它其實需要 option 的話
就會判定為 Missing
例如
mtd -a -i
-i 需要 option 可是沒給這樣
2.目前來講 好像只有在最後一個 token 是需要 option 的 flag 的時候
才會變成 Missing
==============================================================================
其實這些並不是最麻煩的
最討厭的是複合情況 或者說多重解釋
像是
mtd -i 8 -r -a
一開始到 -i 8 -r 都還好
可是 -a 可以視為 flag (Missing)
也可以把 -a 視為 -r 的 option (Illegal)
也可以先說 -r 撞了 -i (Extra)
到底優先度是怎樣就很難解釋 (其實是原 PO 根本沒搞懂)
除了慢慢玩 ref 之外好像也沒什麼好方法...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.248.9.157
※ 編輯: ypf791 來自: 111.248.9.157 (11/17 22:45)
推
11/17 23:04, , 1F
11/17 23:04, 1F
推
11/17 23:06, , 2F
11/17 23:06, 2F
→
11/17 23:07, , 3F
11/17 23:07, 3F
→
11/17 23:08, , 4F
11/17 23:08, 4F
→
11/17 23:08, , 5F
11/17 23:08, 5F
→
11/17 23:14, , 6F
11/17 23:14, 6F
推
11/18 00:07, , 7F
11/18 00:07, 7F
推
11/18 00:32, , 8F
11/18 00:32, 8F
→
11/18 09:30, , 9F
11/18 09:30, 9F
推
11/18 10:44, , 10F
11/18 10:44, 10F
推
11/18 16:39, , 11F
11/18 16:39, 11F
→
11/18 16:39, , 12F
11/18 16:39, 12F
→
11/18 16:40, , 13F
11/18 16:40, 13F
推
11/18 17:11, , 14F
11/18 17:11, 14F
推
11/21 04:36, , 15F
11/21 04:36, 15F
討論串 (同標題文章)