为什么变量不适用于条件

我不知道这段代码发生了什么。变量“VALUE=true”但不明白为什么不能访问第一个条件:

VALUE=$(curl -s http://${HUE}/api/${API}/lights/${LIGHT} | jq --compact-output -C '.state.on')
echo $VALUE

if [ "${VALUE}" = "true" ]; then
  echo "${VALUE} | on | Active=1"
else
  echo "${VALUE} | off | Active=0"
fi

这样做的结果是:

true
true | off | Active=0

为什么 VALUE 不是“真”并且不能进入第一个条件?

+ VALUE='true'
+ echo 'true'
true
+ '[' 'true' = true ']'
+ echo 'true | off | Active=0'
true | off | Active=0

我们可以看到 VALUE 上没有空格

+ VALUE='true'

提前致谢

回答

在HTML而言,你是比较<span>foo</span>foo,并会感到困惑,他们不匹配,因为他们都看在页面上是相同的。

这是一个set -x没有澄清这一点的悲剧。以下是检查真实值的其他一些方法:

$ printf '%qn' "$VALUE"
$'E[0;39mtrueE[0m'

$ printf '%sn' "$VALUE" | cat -vE
^[[0;39mtrue^[[0m$

你得到这个垃圾而不是true因为你要求jq彩色输出。只需删除-C(并可能添加-r)即可获得纯文本输出。


以上是为什么变量不适用于条件的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>