在bash,curl,grep序列之后,我如何回应"通过"或"失败"?

Caq*_*aqu -1 macos bash grep curl sed

我是优雅单行的忠实粉丝.我正在尝试编写一个单行测试,在执行http请求和搜索后输出"pass"或"fail".我尝试过这样的事情:

curl "http://haystack.io" | sed 's/.*?needle.*/PASS/' || echo FAIL
Run Code Online (Sandbox Code Playgroud)

......但这不会失败.

还尝试过:

curl "http://haystack.io" | if [$(grep -oE "needle") = "needle"]; then echo PASS; else echo FAIL; fi
Run Code Online (Sandbox Code Playgroud)

...但我无法正确理解语法.

我怎样才能做到这一点?

tha*_*guy 5

如果你只是寻找针,你可以grep -q用来获得退出代码:

if curl "http://haystack.io" | grep -q needle
then
  echo "PASS"
else
  echo "FAIL"
fi
Run Code Online (Sandbox Code Playgroud)

您的方法存在问题:

curl "http://haystack.io" | sed 's/.*?needle.*/PASS/' || echo FAIL
Run Code Online (Sandbox Code Playgroud)

sed表达式有效时始终返回成功,即使替换未触发也是如此.另外,它使用BRE,而你的正则表达式是PCRE.

在这一个:

curl "http://haystack.io" | if [$(grep -oE "needle") = "needle"]; then echo PASS; else echo FAIL; fi
Run Code Online (Sandbox Code Playgroud)

你缺少引号和间距(shellcheck会帮助你),如果有多个匹配,它也不起作用.