if语句中的Bash字符串比较

时间:2013-09-05 15:18:32

标签: bash

由于bash编程,我变得疯狂了

我有以下内容:

result="ERROR|0"  # From a complex sed execution
IFS='|' read -a array <<< "$result"

if [ "${array[0]}" == "ERROR" ]; then
    echo "Error"
fi

它应该打印错误,但它不会。

任何想法我做错了什么?

编辑:实际上,现在它可以正常工作了,所以我添加了前面的代码,我得到了“结果”字符串

result=$( [some code that gives me an output] \
          | grep "Executed" \
          | sed s/'\(.*\) Executed \(.*\) of \(.*\) \(.*\) (.*)'/'\4|\3'/ \
        )

它应该返回一个字符串,不应该吗?我之前写的字符串

2 个答案:

答案 0 :(得分:4)

您的代码的第一个版本中有两个小错误:

  • $result="ERROR...(要分配,您必须使用result=value
  • <<< "$result(您错过了第二个"关闭报价单。)

使用此代码,它可以工作:

result="ERROR|0"  # From a complex sed exectution
IFS='|' read -a array <<< "$result"

if [ "${array[0]}" == "ERROR" ]; then
    echo "Error"
fi

事实上,我认为您在宽限期内更新了代码,现在没问题。

我在第一行添加了#!/bin/bash并执行了:

$ ./script
Error

答案 1 :(得分:0)

为变量赋值时,请勿使用$表示法。 例如使用

 result="foo"

而不是

 $result="foo"

然后在编写字符串时不要忘记终止引号:

IFS='|' read -a array <<< "$result

错过了"$result中的终止引用。

一个好的语法荧光笔可以提供很多帮助(只需将问题中的语法高亮与答案中的语法高亮进行比较)