我的脚本中有以下代码:
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. ..'
答案 0 :(得分:0)
总是引用你的变量,除非你知道你想要在扩展上进行单词拆分和通配。
if [ "${y[2]}" = '-file-control,loggernet datalogger locked' ]; then
您还可以使用内置的[[
语法,该语法不会对变量进行单词拆分。
if [[ ${y[2]} = '-file-control,loggernet datalogger locked' ]]; then
答案 1 :(得分:0)
twalberg正确诊断出了这个问题。简单的解决方案当然是在IFS中包含因此,有一个迷路
^M
表示您的cora_cmd
输出 包括DOS风格的\r\n
行结尾,你只是剥离了\n
,留下回车符。这就是为什么你不是 得到一场比赛...... - twalberg
\r
:
IFS=$'\r\n' y=($RESULT)
也可以在测试\r
中加入== $'-file-control,loggernet datalogger locked\r'
。