bash中带引号和不带引号的相同值的相等性

问题描述

我有这个代码

#!/bin/bash
today=$(date +'%Y-%m-%d')
date_in_config=$(cat config.json  | jq ".date")
echo $date_in_config
echo $today

if [ $date_in_config == $today ];then
  echo "Same date"
else
  echo "different"
fi

config.json

{
  "date": "2021-03-24","session": "0"
}

我一直在比较日期。我从上面的代码得到的输出

"2021-03-24"
2021-03-24
different

我做错了什么?

解决方法

显然您已经发现问题所在:对于 Bash(以及我能想到的任何其他编程语言),"x"x 不同。

  • 将双引号放在 today 中:

    today=$(date +'"%Y-%m-%d"')
    
  • 或者在检索JSON信息时去掉引号:

    date_in_config=$(jq -r ".date" < config.json)
    

记住引用你的变量扩展,正如 Shellcheck 会告诉你的那样。还要去掉 == bashism(可选,为了便携性)。

[ "$date_in_config" = "$today" ]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...