3

我查看了 Stack Overflow 上所有类似的问题,并在他们的文档中尝试了很多东西。我目前的尝试如下。

我想要完成的是基于计算机用户的不同行为。我有一台工作计算机和一台家用计算机,当我在命令行中输入“代码”时,我希望工作计算机转到不同的目录,而不是我在家里输入它时想要的目录。我试过这个(我的工作用户名是 afk,home 是 sfk):

function code
    set result (dirh)
    if [contains "sfk" $result]
        cd ~/rails
    else if [contains "afk" $result]
        cd ~/code
    else
        echo $result
    end
end

目前,这是在抱怨“未知命令包含用户/sfk/.config/fish/”(当我输入这个时,我的密码是用户/sfk/.config/fish/)。我认为可能 contains 仅用于列表,但文档对此并不是特别清楚?知道我该怎么做吗?

编辑

刚刚尝试过,虽然它不再出错,但它最终出现在 else 情况下,它不应该,导致我的用户是 sfk,它包含在 dirh 字符串中:

function code
    set result (dirh)
    if test (contains "sfk" $result)
        cd ~/rails
    else if test (contains "afk" $result)
        cd ~/code
    else
        echo $result
    end
end
4

1 回答 1

6

正如上面评论中所说,这是这个特定用例的最佳解决方案。但是要回答这个问题,以防有人想做其他事情。

你是对的contains,它在列表项上完全匹配。您可以改用该switch功能。支持通配符匹配。

function code
    set -l result (dirh)

    switch $result
        case '*sfk*'
            cd ~/rails
        case '*afk*'
            cd ~/code
        case '*'
            echo $result
    end
end
于 2013-06-10T06:37:34.137 回答