如何在fish shell中定义argv不在命令末尾的函数

如何在fish shell中定义argv不在命令末尾的函数,shell,fish,Shell,Fish,如果我想做一个查找的缩写 find dir\u name-类型d 至fd 然后我可以使用fddir\u name来执行命令 如何定义函数或制作别名 如果我能做到这一点就更好了:fd dir name other_operation,它等于 find dir\u name-在终端中键入d其他\u操作 fish shell内置文档没有关于这方面的信息。好吧,如果fish对POSIX shell的跟踪比较好,那么像这样的函数可能会起到作用 fd() { find "$@" -type d }

如果我想做一个
查找
的缩写

find dir\u name-类型d

fd

然后我可以使用
fddir\u name
来执行命令

如何定义
函数
或制作
别名

如果我能做到这一点就更好了:
fd dir name other_operation
,它等于

find dir\u name-在终端中键入d其他\u操作


fish shell内置文档没有关于这方面的信息。

好吧,如果
fish
对POSIX shell的跟踪比较好,那么像这样的函数可能会起到作用

fd() {
    find "$@" -type d
}
或:

第一个假设所有参数都是目录或操作数,可以位于
-type d
之前。第二个假设只有一个目录,然后是其他参数

除了表示法的细节之外,您可能还可以在
fish
中实现类似的功能


当然,如果您查看文档,特别是关于如何创建的文档,您会发现语法上的相似性是有限的

function fd
    find $argv -type d
end

function fd
    find $argv[1] -type d $argv[2..-1]
end

最后一个函数只有在至少有2个参数传递给该函数时才起作用。'这很奇怪;在其他地方,不存在的变量会扩展为零,但不会在这样的数组扩展中。有一个(内置)命令
count
可用于确定数组中的元素数:
count$argv
将返回数组中的元素数

因此,守则的修订版本将是:

function fd
    if test (count $argv) -gt 1
        find $argv[1] -type d $argv[2..-1]
    else
        find $argv[1] -type d
    end
end

好吧,如果
fish
对POSIX shell的跟踪比较好,那么像其中一个这样的函数可能会起到作用

fd() {
    find "$@" -type d
}
或:

第一个假设所有参数都是目录或操作数,可以位于
-type d
之前。第二个假设只有一个目录,然后是其他参数

除了表示法的细节之外,您可能还可以在
fish
中实现类似的功能


当然,如果您查看文档,特别是关于如何创建的文档,您会发现语法上的相似性是有限的

function fd
    find $argv -type d
end

function fd
    find $argv[1] -type d $argv[2..-1]
end

最后一个函数只有在至少有2个参数传递给该函数时才起作用。'这很奇怪;在其他地方,不存在的变量会扩展为零,但不会在这样的数组扩展中。有一个(内置)命令
count
可用于确定数组中的元素数:
count$argv
将返回数组中的元素数

因此,守则的修订版本将是:

function fd
    if test (count $argv) -gt 1
        find $argv[1] -type d $argv[2..-1]
    else
        find $argv[1] -type d
    end
end

您可以这样定义一个函数:

function fd
    find $argv -type d
end

函数的参数在
$argv
列表中传递。在将它们传递给查找之前,您可以自由地对它们进行切片和骰子分割。

您可以定义如下函数:

function fd
    find $argv -type d
end
函数的参数在
$argv
列表中传递。您可以在将它们传递给“查找”之前对其进行切割。

感谢@Jonathan Leffler,这离不开他的帮助:
至于他的回答,
$argv[2..-1]
(或
$argv[2…-1]
)的最后一部分不正确,似乎
鱼壳
不支持这种语法,它说:

Could not expand string “$argv[2..-1]
实际上经过几次测试后,发现该部分是不必要的,
鱼壳
将自动解析
$argv
的其余部分,如果
$argv
是一个列表


正确的模板是(已经过测试,非常简单): 感谢@Jonathan Leffler,这离不开他的帮助:
至于他的回答,
$argv[2..-1]
(或
$argv[2…-1]
)的最后一部分不正确,似乎
鱼壳
不支持这种语法,它说:

Could not expand string “$argv[2..-1]
实际上经过几次测试后,发现该部分是不必要的,
鱼壳
将自动解析
$argv
的其余部分,如果
$argv
是一个列表


正确的模板是(已经过测试,非常简单):
哦,天啊,这是
$argv
,我把它错认为
@argv
,实际上如果我
函数fd
它会显示细节,我试过
查找@argv-type d
,它应该是
查找$argv-type d
。我的错。谢谢你的最后一部分。哦,天啊,这是
$argv
,我把它误认为
@argv
,实际上如果我
函数fd
它会显示细节,我试过
查找@argv-typed
,它应该是
查找$argv-typed
。我的错。谢谢你的最后一部分。我很失望你不再认为我的回答对你有任何帮助。我不介意它被拒绝;我最初的回答并不十分完美。我必须学习一个新的shell来为您提供正确的语法,因此我从中获得了一些东西(尽管我不确定我是否会成为一个转换为
鱼的人)。但我确实觉得你可能从中获得了一些价值。@Jonathan Leffler很简单,事实是,我试图将我的上述答案附加到你的答案中(编辑你的答案),但我的浏览器(或网络)有时加载StackOverflow的速度非常慢。在我将其添加到您的答案后,我无法提交,我尝试了几次(关闭选项卡,重新启动浏览器),但都失败了。所以我必须自己回答。已经有人评论说你帮了忙,正确的mime解决方案离不开你的帮助。至于
投票
,如果你愿意,我可以投票。但是你的回答不会被接受,因为它不是直接的答案。希望您能理解。:-)向上投票表示“这个答案是有用的”(对于任何有用的定义)。被接受的答案之所以被接受,是因为“它解决了您的问题,或者是最有助于找到您的解决方案”(引用您将鼠标悬停在接受图标上时出现的文本)。你决定做什么,谢谢你的支持