Bash Script Array比较问题

时间:2014-06-05 19:54:16

标签: bash

我的脚本中有以下代码:

RESULT=$(cora_cmd --input={connect hrdwtst01.campbellsci.com';' file-control $STATION_NAME stop-program';' bye';'})
declare y
IFS=$'\n' y=($RESULT)
echo ${y[2]}
if [ ${y[2]} == '-file-control,loggernet datalogger locked' ]; then
    echo -e "\t\E[31;1m.. ERROR - Not able to stop the datalogger's program. ..\E[37;0m"
fi
echo "$RESULT"

比较不起作用,它永远不会进入if语句。有什么想法吗?

set -x的结果:

'++ cora_cmd '--input={connect' 'hrdwtst01.campbellsci.com;' file-control TS_CR850_PB_801 'stop-program;' 'bye;}'
+ RESULT='CoraScript 1, 13, 06 Beta
+connect,"coralib3.dll version 1, 7, 18 Beta"
'file-control,loggernet datalogger locked
+ declare y
+ IFS='
'
+ y=($RESULT)
' echo '-file-control,loggernet datalogger locked
-file-control,loggernet datalogger locked
' '!=' '-file-control,loggernet datalogger locked' ']'
+ echo -e '\t\E[31;1m.. ERROR - Not able to stop the datalogger'\''s program.   ..\E[37;0m'
    .. ERROR - Not able to stop the datalogger's program. ..'

2 个答案:

答案 0 :(得分:0)

总是引用你的变量,除非你知道你想要在扩展上进行单词拆分和通配。

if [ "${y[2]}" = '-file-control,loggernet datalogger locked' ]; then

您还可以使用内置的[[语法,该语法不会对变量进行单词拆分。

if [[ ${y[2]} = '-file-control,loggernet datalogger locked' ]]; then

答案 1 :(得分:0)

  

因此,有一个迷路^M表示您的cora_cmd输出   包括DOS风格的\r\n行结尾,你只是剥离了   \n,留下回车符。这就是为什么你不是   得到一场比赛...... - twalberg

twalberg正确诊断出了这个问题。简单的解决方案当然是在IFS中包含\r

IFS=$'\r\n' y=($RESULT)

也可以在测试\r中加入== $'-file-control,loggernet datalogger locked\r'