Bash shell:如何从变量值重新格式化字符串日期
Bash shell: How to reformat string date from a variable value
我了解如何使用 date
命令重新格式化日期,对此我没有意见。但是,我有一个问题,我正在努力解决这个问题——我想重新格式化的日期是另一个命令的输出,所以我将它存储在变量中。我正在努力研究如何指定我想要获取一个命令的输出的语法,并通过 date -d
运行 并将其存储在另一个变量中。这是我尝试过的:
expdate=`get_expire_date.sh`
echo $expdate
Mon 23 Mar 2022 05:05:05 PM UTC
expdval=`date -d'($expdate)'`
echo $expdval
我得到的是今天的日期,而不是从脚本输出中转换后的到期日期。当然,如果我不加括号,它会将 $expdate 视为要翻译的文字文本并给出错误,而如果我不加单引号,它会使用日期字符串中的空格作为分隔符,并且只抓取第一个标记。
我做错了什么?
我发现我必须改用双引号,就像这样(对旧的做事方式感到抱歉,更新到新的 shell 语法):
expdval=$(date -d"$(get_expire_date.sh)")
首先,参数扩展不会出现在单引号内。您需要更改单引号
expdval=`date -d'($expdate)'`
双引号
expdval=`date -d"($expdate)"`
其次,括号创建了一个无效输入,结果(出于我不太理解的原因)在当天午夜的输出。 (你会得到与琐碎的无效日期相同的结果 date -d ""
。)
去掉括号,您将得到相同的日期(因为输入格式与默认输出格式匹配)。
$ date -d "$expdate"
Wed Mar 23 13:05:05 EDT 2022
要实际操作它,您需要明确的输出格式:
$ date -d "$expdate" +%Y-%m-%d
2022-03-23
或某种形式的“算术”日期:
$ date -d "$expdate + 2 days"
Fri Mar 25 13:05:05 EDT 2022
我了解如何使用 date
命令重新格式化日期,对此我没有意见。但是,我有一个问题,我正在努力解决这个问题——我想重新格式化的日期是另一个命令的输出,所以我将它存储在变量中。我正在努力研究如何指定我想要获取一个命令的输出的语法,并通过 date -d
运行 并将其存储在另一个变量中。这是我尝试过的:
expdate=`get_expire_date.sh`
echo $expdate
Mon 23 Mar 2022 05:05:05 PM UTC
expdval=`date -d'($expdate)'`
echo $expdval
我得到的是今天的日期,而不是从脚本输出中转换后的到期日期。当然,如果我不加括号,它会将 $expdate 视为要翻译的文字文本并给出错误,而如果我不加单引号,它会使用日期字符串中的空格作为分隔符,并且只抓取第一个标记。
我做错了什么?
我发现我必须改用双引号,就像这样(对旧的做事方式感到抱歉,更新到新的 shell 语法):
expdval=$(date -d"$(get_expire_date.sh)")
首先,参数扩展不会出现在单引号内。您需要更改单引号
expdval=`date -d'($expdate)'`
双引号
expdval=`date -d"($expdate)"`
其次,括号创建了一个无效输入,结果(出于我不太理解的原因)在当天午夜的输出。 (你会得到与琐碎的无效日期相同的结果 date -d ""
。)
去掉括号,您将得到相同的日期(因为输入格式与默认输出格式匹配)。
$ date -d "$expdate"
Wed Mar 23 13:05:05 EDT 2022
要实际操作它,您需要明确的输出格式:
$ date -d "$expdate" +%Y-%m-%d
2022-03-23
或某种形式的“算术”日期:
$ date -d "$expdate + 2 days"
Fri Mar 25 13:05:05 EDT 2022