簡體   English   中英

魚 Shell argparse 做某事非常意外

[英]Fish Shell argparse Doing Something Very Unexpected

我在 OS X 10.14.5 上運行 fish 3.1.0。

我是釣魚和 argparse 的新手。 我喜歡他們兩個。

下面是簡單的測試代碼:

#!/usr/local/bin/fish

function afoo 
    set -l options (fish_opt -s h -l help)
    set options $options (fish_opt -s m -l max --required-val)
    set options $options (fish_opt -s n -l nnn --optional-val)

    argparse $options -- $argv

    echo "max" $_flag_max
    echo "nnn" $_flag_nnn
end

應該創建兩個開關 m 和 n。 m必須取值,而 n可以取值。

這是在終端 CLI 中測試基本 function 時的簡單屏幕截圖:

[/usr/local/bin/fish 3.1.0] ~ afoo -m foo -n baz
max foo
nnn
[/usr/local/bin/fish 3.1.0] ~ afoo -mfoo -nbaz
max foo
nnn baz
[/usr/local/bin/fish 3.1.0] ~ 

為什么 argparse解析 -n 開關及其參數之間的空格,但解析 -m 開關及其參數之間的空格?

這讓我發瘋了。 我已經閱讀了十幾遍文檔。 我究竟做錯了什么?

PS開關的順序無關緊要。

為什么 argparse 不解析 -n 開關及其參數之間的空格,但它解析 -m 開關及其參數之間的空格?

-n采用可選參數。 根據 getopt 約定,這些必須直接附加到選項參數。

看看例如

echo never | grep --color never

這不會禁用顏色,而是將顏色設置為自動(默認無參數值)並查找字符串“never”。 所以它會用紅色顯示“從不”。 相反,您必須使用--color=never (或者如果它有一個簡短的選項“-c”,那么“-cnever”也可以接受)。

Argparse 的行為類似於通常的 unix getopt(3) 選項解析,它也在幕后使用,因為這就是系統的 rest 的行為方式。

這是因為n/nnn=? 有一個可選參數,而m/max=有一個必需參數。 這些字符串是您調用 fish_opt 的fish_opt

成功運行argparse后,非選項 arguments 存儲在$argv中。 所以你的baz最終會出現在$argv中。

太好了,非常感謝。 非常。

如果您是像我這樣的新手,您可以通過在堆棧溢出中搜索“getopt space optional argument”來找到有關這些答案指向的更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM