【问题标题】:How to have argv option in fish shell function?如何在鱼壳函数中有 argv 选项?
【发布时间】:2017-02-21 21:00:24
【问题描述】:

我需要让我的鱼函数接受 argv 选项。 类似的,

myProg <command> <options>

目前我有以下功能

function myProg
        java -jar "/Users/username/myProg/myprog-0.2.jar" "$argv"
 end

我需要从我的终端发送以下命令

myProg vm start

你能帮忙改写函数来接受选项吗?

谢谢..

【问题讨论】:

    标签: macos terminal fish


    【解决方案1】:

    像$argv 这样的fish 变量是数组,当插入到命令中时不应包含在双引号中,除非您想将这些值连接成单个字符串。换句话说,只需像这样定义你的函数:

    function myProg
        java -jar "/Users/username/myProg/myprog-0.2.jar" $argv
    end
    

    【讨论】:

    • 值得注意的是,使用引号,fish 不会将它们变成单个字符串,它实际上会在每个参数周围加上引号,因此,myProg vm start 将运行 java -jar "/path/thing.jar" "vm" "start"。
    • 不,它没有。它将它们变成一个字符串,列表元素之间有空格。参见例如set list foo bar; printf "%s\n" "$list".
    • faho 是正确的,艾玛。我怀疑您正在考虑 POSIX 兼容 shell 中 "$@" 构造的行为。 Fish 不支持这一点,因为它不需要假设它具有更健全的变量插值语义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    相关资源
    最近更新 更多