我尝试了以下这些,但失败了。我需要输出日期格式。
--------第一次尝试--------
#!/bin/bash
echo "read date yyyymmdd"
read $temp
dd=$(date -j -f '%Y%m%d' "$temp" +'%Y%m%d')
echo $dd
输出:invalid option -- 'j'
--------第二次尝试--------
#!/bin/bash
echo "read date yyyymmdd"
read $temp
dd=$(date -d "$temp" +'%Y%m%d')
echo $dd
输出:打印今天的日期。
答案1
主要问题是read $temp
。要将某些内容读入变量,请不要使用前缀$
(这将访问变量的值):
read temp
第二个问题是您似乎不知道date
您正在使用的命令的实现方式。 GNUdate
没有-j
标志。然而,该标志可用于其他实现date
(例如在 BSD 系统上,它导致实用程序解析给定的日期戳并进行输出,但不放日期)。
第三个问题是您似乎想使用 转换$temp
为YYYYMMDD
格式date
,但您已经要求用户输入此格式的日期,因此转换是无操作的。
脚本的更正版本(为 GNU 编写)date
,并且没有对第三个问题做任何事情,因为不清楚您要做什么实际上想做):
#!/bin/bash
read -p 'Enter date (YYYYMMDD): ' indate
date -d "$indate" +'%Y%m%d'
如果全部你想要做的就是将日期放入变量中然后输出它,那么就没有理由向用户询问日期:
#!/bin/sh
thedate=$( date +'%Y%m%d' )
printf 'The date is %s\n' "$thedate"
或者,如果您不需要将其存储在变量中供以后使用,
#!/bin/sh
date +'The date is %Y%m%d'
答案2
因此,您试图将一些输入读取到$temp
变量中,然后将其打印在今天的日期旁边?
您不希望命令的变量$
前面有:temp
read
#!/bin/bash
echo "read date yyyymmdd"
read temp
echo "${temp} + $(date '+%Y%m%d')"