Fish 别名传递多个参数,访问特定参数

Fish alias pass multiple arguments, access specific argument

我想在脚本中创建一个别名,用于使用 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

知道了。但是 -m 在这种情况下不是可选的。

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

然后你可以输入pr 'message' 'branch'

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

鱼数组从索引 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 讨论了删除索引越界错误)

还有另一种方法可以使用 test 方法结合 count 检查您的输入。这是一个检查大于 (gt) 1 的示例。

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