如何测试包含美元符号和可能包含其他符号的变量的相等性?

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

mwe.json

[
{ "eq": "$a=b^2" },
{ "eq": "$a=b**2" }
]

mwe.sh

#!/bin/bash

eq1=$( jq -r '.[0].eq' mwe.json )
eq2=$( jq -r '.[1].eq' mwe.json )
if [[ "$eq1" -eq "$eq2" ]]; then 
  echo "same TeX equation"
fi

错误

$./mwe.sh
./mwe.sh: line 5: [[: $a=b^2: syntax error: operand expected (error token is "$a=b^2")

mwe2.sh

#!/bin/bash

eq1=$( jq -r '.[0].eq' mwe.json )
eq2=$( jq -r '.[1].eq' mwe.json )
if [[ "'""$eq1""'" -eq "'""$eq2""'" ]]; then 
  echo "same equation"
fi

错误

$./mwe2.sh
./mwe2.sh: line 5: [[: '$a=b^2': syntax error: operand expected (error token is "'$a=b^2'")

您能否建议如何比较包含美元符号和其他特殊符号的两个变量?

bash jq
1个回答
0
投票

无需两次调用jq:

#!/bin/bash
function data {
    cat<<EOF
[
  { "eq": "$a=b^2" },
  { "eq": "$a=b**2" }
]
EOF
}

data | jq '.[0].eq == .[0].eq'
data | jq '.[0].eq == .[1].eq'
echo Using -e:
data | jq -e '.[0].eq == .[0].eq' > /dev/null
echo $?
data | jq -e '.[0].eq == .[1].eq' > /dev/null
echo $?

产量:

true
false
Using -e:
0
1
© www.soinside.com 2019 - 2024. All rights reserved.