如何测试命令的结果是否包含fish shell中的字符串?

时间:2014-01-31 20:06:53

标签: terminal osx-mountain-lion fish

我正在尝试编写一个简短的函数,允许我从命令行打开和关闭wemo灯。基本上我有一个命令,如果我输入wemo status,如果指示灯亮,则返回Switch: Lights 1,如果指示灯熄灭则返回0。我想写一个鱼功能,基本上让我切换它们:

function lights --description 'Toggle lights'
    if contains (wemo status) "Lights 1"
        wemo switch "Lights" off
    else
        wemo switch "Lights" on
    end
end

虽然这不起作用。我认为parens可能会进行文本替换?任何人都知道我如何测试一个字符串是否包含Fish中的另一个字符串?

2 个答案:

答案 0 :(得分:3)

contains似乎是要测试列表是否包含元素

set elems foo bar baz
contains bar $elems; and echo yep

使用命令替换,列表似乎是面向行的:

contains "e f"   (printf "%s\n" "a b c" "d e f" "g h i"); and echo y; or echo n
contains "d e f" (printf "%s\n" "a b c" "d e f" "g h i"); and echo y; or echo n
n
y

使用switch匹配结果的模式是一个不错的选择。

答案 1 :(得分:2)

所以我最终解决了以下问题:

# Toggle lights
function lights --description "Toggle Wemo Lights"
    set -l wemo (wemo status)
    switch $wemo
        case '*1'
            wemo switch "Lights" off
        case '*0'
            wemo switch "Lights" on
    end
end