比较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"
我做错了什么?
答案 0 :(得分:1)
您在${line:6:2}
条件下将$m_BSID
与if
进行了比较。
"${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