【问题标题】:Assigning date to variable and arithmetic operations doesn't work on Solaris shell将日期分配给变量和算术运算在 Solaris shell 上不起作用
【发布时间】:2017-11-05 11:29:04
【问题描述】:

我正在 Solaris 中尝试以下命令。我正在bash中尝试所有这些@

START_DT="$(date --date='2013-04-01' +'%Y-%m-%d')"

它给了我错误

-bash-3.2$ START_DT="$(date --date='2013-04-01' +'%Y-%m-%d')"
date: illegal option -- date=2013-04-01
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
        date [-u] [+format]
        date -a [-]sss[.fff]

-bash-3.2$ START_DT=$(date -d '2013-04-01' +%Y-%m-%d)
date: illegal option -- d
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
        date [-u] [+format]
        date -a [-]sss[.fff]

当我在 RedHat 中尝试相同的方法时,它可以工作。

$ START_DT="$(date --date='2013-04-01' +'%Y-%m-%d')"
$ echo $START_DT
'2013-04-01'

以同样的方式,某些算术运算不起作用。算术运算是指给定日期加上 10 天等。

我尝试了多个参考 - 123,但似乎没有任何效果

但这一切都适用于 Redhat。可能是我有一个非常旧的 Solaris 版本,我只能使用这个服务器来解决这个问题

【问题讨论】:

标签: bash shell date solaris-10


【解决方案1】:

我没有用于测试的 Solaris 10 机器,但它应该带有 perl:

perl -MTime::Piece -sle '
    ($fmt = shift @ARGV) =~ s/^\+//;
    print Time::Piece->strptime($date, $datefmt)->strftime($fmt)
' -- -date='2017-03-15' -datefmt='%Y-%m-%d' '+%d/%m/%y'
15/03/17

使用Time::Piece::strptime函数,需要指定日期时间字符串的日期时间格式。

您可以将其封装在 bash 函数中,例如:

mydate () {
    local OPTIND OPTARG date datefmt fmt opt
    while getopts ":d:f:" opt; do
        case $opt in
            d) date=$OPTARG ;;
            f) datefmt=$OPTARG ;;
            :) echo "error: missing argument for -$OPTARG; return 1 ;;
            *) echo "error: unknown argument: -$OPTARG; return 1 ;;
        esac
    done
    shift $((OPTIND-1))
    if [[ -z "$date" ]]; then
        command date "$@"
    elif [[ -z "$datefmt" ]]; then
        echo "error: missing -f date format for input date $date"
        return 1
    else
        if [[ -z "$1" ]]; then
            fmt="%c"
        else
            fmt=${1#+}
        fi
        perl -MTime::Piece -sle 'print Time::Piece->strptime($d, $df)->strftime($f)' -- \
            -d="$date" \
            -df="$datefmt" \
            -f="$fmt"
    fi
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-12
    • 2017-01-11
    • 2023-03-23
    • 2016-05-17
    • 2011-07-21
    • 1970-01-01
    • 2021-08-05
    • 2020-01-18
    相关资源
    最近更新 更多