鱼壳中的字符串包含

时间:2013-06-08 16:53:37

标签: fish

我已经查看了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

目前,这就是“未知命令包含Users / sfk / .config / fish /”(当我输入时,我的PWD是Users / sfk / .config / fish /)。我想也许包含只是用于列表,但文档对此并不是特别清楚?知道怎么做这个吗?

修改

试过这个,虽然它不再是错误,但它最终会出现在else情况下,它不应该导致我的用户IS 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

1 个答案:

答案 0 :(得分:6)

如上所述,这是特定用例的最佳解决方案。但要回答这个问题,以防有人想做别的事。

你对contains是正确的,它与列表项完全匹配。您可以改用switch函数。这支持通配符匹配。

function code
    set -l result (dirh)

    switch $result
        case '*sfk*'
            cd ~/rails
        case '*afk*'
            cd ~/code
        case '*'
            echo $result
    end
end