为什么我的字符串比较在 bash 中不起作用?

问题描述 投票:0回答:1

我有一个执行类似操作的脚本:

set -x

myJson="echo '{\"data\":\"true\"}'"

commandOutput=$(eval $myJson | jq '.data')

echo $commandOutput

while :
do
    if [[ $commandOutput == "true" ]]
    then
        break
    fi
    sleep 1
done

echo "Done"

但是,我的字符串比较从来不起作用。我成功做到这一点的唯一方法是将“true”放入字符串比较中。看来这与评估有关。由于我设置了 x 标志,因此这里是该脚本的输出:

+ myJson='echo '\''{"data":"true"}'\'''
++ eval echo ''\''{"data":"true"}'\'''
+++ echo '{"data":"true"}'
++ jq .data
+ commandOutput='"true"'
+ echo '"true"'
"true"
+ :
+ [[ "true" == \t\r\u\e ]]
+ sleep 1
+ :
+ [[ "true" == \t\r\u\e ]]
+ sleep 1
+ :
+ [[ "true" == \t\r\u\e ]]
+ sleep 1

似乎右侧的字符串总是被转义,如果是这种情况,为什么会发生这种情况?

string bash jq string-comparison
1个回答
0
投票

从您发布的跟踪中可以看到,

commandOutput
不包含字符串
true
,而是字符串
"true"
,所以你必须对此进行测试:

 [[ $commandOutput == '"true"' ]]
© www.soinside.com 2019 - 2024. All rights reserved.