我正在尝试编写一个简短的函数,允许我从命令行打开和关闭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中的另一个字符串?
答案 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