如何正确比较bash中的字符串

时间:2015-06-18 11:19:10

标签: bash shell

比较bash中的字符串时的奇怪行为:

        if [[ $line:0:1 =~ "BSID" ]]; then
           if [ "${line:6:2}" != "$m_BSID" ]; then
              SUCCESS="fail BSID: ${line:6:2} should be $m_BSID";
              echo $SUCCESS;
           fi
        fi

这就是我得到的:

fail BSID: 6 should be 6

这里是变量检查:

Content of $line: BSID: 6 (Dolby Digital)
declare -- m_BSID="6"

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您在${line:6:2}条件下将$m_BSIDif进行了比较。

"${line:6:2}"将是从索引6开始的2位数字符串,而$m_BSID只是6

如果你跑:

echo "<${line:6:2}>"

你会得到:

<6 >

6之后的一个空格,当然"6 "不等于"6"

您应该使用:

if [[ "${line:6:1}" != "$m_BSID" ]]; then
   SUCCESS="fail BSID: ${line:6:1} should be $m_BSID"
   echo "$SUCCESS"
fi