看板 EE_DSnP 關於我們 聯絡資訊
為了行文方便定義一下用語 名詞: 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)
XDucka:我也是慢慢try ref... 蠻花時間的XD 11/17 23:04
ric2k1:謝謝精闢的解析,不過關於錯誤訊息只要不要把錯的 parse 成 11/17 23:06
ric2k1:對的,對的 parse 成錯的,就 OK. 錯誤訊息有出入沒有關係 11/17 23:07
ric2k1:畢竟 parse 的順序不同都會造成訊息的不同,大家可以不用 11/17 23:08
ric2k1:花時間在調成跟 ref 一樣 (每年好像都會有這個問題) 11/17 23:08
ypf791:但就是會想調到全都一樣啊.... 11/17 23:14
mikechen25:沒想到今天調了好久還是少調到一個東西...>~< 11/18 00:07
Phantasnix:推 繼續慢慢玩ref 11/18 00:32
ypf791:剛剛跑了一下 發現mtn和mtd用的邏輯是不一樣的(倒) 11/18 09:30
pochih:感謝ypf大與老師的解說 11/18 10:44
david942j:mtn -a 1 a 這樣是extra mtn -a 1 這樣是missing 怎麼 11/18 16:39
david942j:都覺得不太合理= =" 11/18 16:39
david942j:這種錯誤訊息會讓使用者陷入無窮迴圈吧 11/18 16:40
ric2k1:建議已經寫完了的人再來追究這個錯誤訊息吧! 不算分的 XD 11/18 17:11
caspercat:不算分推!! 11/21 04:36