【发布时间】:2017-02-13 03:18:36
【问题描述】:
我非常喜欢优雅的单线。我正在尝试编写一个单行测试,在执行 http 请求和搜索后输出“通过”或“失败”。我尝试过这样的事情:
curl "http://haystack.io" | sed 's/.*?needle.*/PASS/' || echo FAIL
...但这并没有正确失败。
也试过了:
curl "http://haystack.io" | if [$(grep -oE "needle") = "needle"]; then echo PASS; else echo FAIL; fi
...但是我的语法不太正确。
我该怎么做?
【问题讨论】:
-
shellcheck.net 是你的朋友——通常,修复它发现的错误是一个很好的起点。
-
顺便说一句,使用
?来修改前面的*是否贪心是PCRE主义;它不适用于 BRE(每个 POSIX 兼容的sed默认使用)或 ERE(可以在 GNU 或 BSDsed中分别使用-r或-E参数启用)。 -
试试
curl "http://haystack.io" | grep -q needle && echo PASS || echo FAIL。警告:如果标准输出不可写,echo可能会失败。 -
@alvits,grumble grumble,re:鼓励人们将
a && b || c视为它不是的三元组。 :) -
@CharlesDuffy - 我完全同意你的观点,但我绝不鼓励 OP。我的建议只是纠正他失败的尝试。鼓励其他读者是无意的:(