条件差异/测试

条件差异/测试

可以说我必须测试文件是否包含字符串“mail”,两者之间有什么区别

if grep -q "mail" "file"; then ...


if [ $( grep -l "mail" "file") ]; then ...

[ grep -l "mail" "file" ] && ..

这些是否有任何差异,或者它们在全局上是否相同(就像它们在内部或命令中的任何条件下都会导致相同的结果一样)

答案1

if command; then ...

评估 的退出状态command。 0 表示成功(评估条件为真)。

首先:[与 几乎相同test,因此它希望command字符串符合其语法。

if [ $(command) ]; then ...

计算包含 的输出的字符串command。在大多数情况下它不起作用 - 请参阅下面的示例。

[ command ] && ..

grep -l "mail" "file"将被解释如下:

  • grep- 一个字符串
  • -l- 一元运算符返回以下字符串的长度
  • "mail"- 一个字符串,将作为参数传递给-l运算符
  • "file"- 一个字符串

根据实现的不同,您会得到略有不同的错误,因为上面要求[评估由字符串、数字和另一个字符串组成的序列,而不需要任何运算符。默认情况下[(以及test)是内置的 shell,您可以将错误消息与独立二进制文件(通常/bin/[为 或/usr/bin/[)进行比较。

相关内容