Terminal 如何测试命令的结果是否包含鱼壳中的字符串?

Terminal 如何测试命令的结果是否包含鱼壳中的字符串?,terminal,osx-mountain-lion,fish,Terminal,Osx Mountain Lion,Fish,我正在尝试编写一个简短的函数,允许我从命令行切换wemo灯光的打开和关闭。基本上,我有一个命令,如果我键入wemo status,如果灯亮,则返回开关:灯1,如果灯熄灭,则返回0。我想编写一个fish函数,它基本上允许我切换它们: function lights --description 'Toggle lights' if contains (wemo status) "Lights 1" wemo switch "Lights" off else

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

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

虽然这不起作用。我想帕伦夫妇可能会做一个文本替换?有人知道我如何测试Fish中的一个字符串是否包含另一个字符串吗

所以我最终用以下方法解决了这个问题:

# 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

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

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

作为fish的首席开发人员,这是我的建议。如果愿意,可以删除该变量:
开关(wemo状态)
…正确。
包含的内容是它不处理通配符模式匹配<代码>包含opt\*$list
将无法按预期工作。另外,在检查带有前置连字符的符号(例如,
包含--opt$list
)时,请记住不要忘记您的
-->
n
y