2017-06-15 56 views
1

我想在腳本中創建一個別名,用於使用hub創建pull-requests魚別名傳遞多個參數,訪問特定參數

我打算創建一個這樣的功能。

# PR 
function pr --description 'hub pr' 
    hub pull-request -b $argv[0] -m $argv[1]; 
end 

-m部分可以是可選的。

所以我都可以像這樣pr 'branch here' 'message here'

,但我得到一個錯誤說Array index out of bounds

回答

5
function pr -d 'git pull-request' -a branch message 
    set -q message[1] 
    and set message -m $message 
    hub pull-request -b $branch $message 
end 
+0

注意'message [1]'在這裏。目前'-a'的工作方式是變量總是被定義的,所以你需要檢查它是否包含任何東西。 – faho

0

明白了。但在這種情況下,-m不是可選的。

# PR 
function pr --description 'git pr' --argument-names message branch 
     hub pull-request -m $message -b $branch; 
end 

然後你就可以鍵入pr 'message' 'branch'

+0

現在'-m'是如何選擇的? –

+0

我想這不是。這是我想出來的,我不接受這個答案。正如我記得'-m'可以是可選的,不一定是。 – iamdevlinph

1

魚陣列開始索引1處,所以你$argv[0]是錯在這裏。使用$argv[1]而不是那個,$argv[2]而不是您目前使用的$argv[1]

但是,目前除1以外的任何元素將導致數組索引超出界限錯誤,如果您嘗試訪問它並且未設置,則需要檢查它是否與set -q argv[2]一致。

# PR 
function pr --description 'hub pr' 
    set -l message 
    if set -q argv[2] 
     set message -m $argv[2] 
    end 
    hub pull-request -b $argv[1] $message; 
end 

(另外,https://github.com/fish-shell/fish-shell/issues/826討論刪除索引出界外的錯誤)

1

還有另一種方法結合使用的testcount檢查您輸入。這裏是一個檢查大於(gt)的示例1.

if test (count $argv) -gt 1; 
    set r_args $argv[2..-1];