我需要找到今天的日期,然后减去一年,然后将该日期格式化为YYYY-MM-dd格式。
我可以用我编写的脚本来完成此操作,但是显然它仅与bash兼容。我需要它与AIX兼容。
lastYear=`date +'%Y-%m-%d' -d 'last year'`
searchDate="$lastYear 00.00.00";
echo "Retrieving data start from $searchDate"
myquery="myquery >= '$searchDate'"
在AIX机器上运行时的结果是,它仅通过$ searchDate的“ 00:00:00”部分,日期没有像我希望的那样在时间之前加前缀。为了在Linux / Unix变体之间实现最大兼容性,最安全的写法是什么?
谢谢!
答案 0 :(得分:1)
结帐更新了以下部分
原始答案
尝试一下。它使用-v
标志来显示将当前日期调整为负的一年-1y
searchDate=$(date -v-1y +'%Y-%m-%d')
echo "Retrieving data start from $searchDate"
myquery="myquery >= '$searchDate'"
以下是输出:
Retrieving data start from 2017-06-21
注意:我确实尝试使用bash shebang在脚本文件中运行您在上面提供的行,但遇到illegal time format
错误,输出为00:00:00
。我上面提供的脚本可以在unix系统上正常运行。
希望这会有所帮助。祝你好运!
更新部分
这是测试sh,bash,dash和ksh(AIX的默认)shell之间的代码兼容性的好资源。
确定实际问题
当我输入您的代码时,它清楚地标识了被认为是传统的语法,并提出了解决方法,并给出了link with an example and a great explanation。输出如下:
lastYear=`date +'%Y-%m-%d' -d 'last year'`
^__Use $(..) instead of legacy `..`.
因此,通过进行一些小的更改,您似乎可以使用编写的代码:
lastYear=$(date +'%Y-%m-%d' -d 'last year')
注意:这个问题已经有了一个可以接受的答案,但是我想共享此资源,因为它可能会在将来帮助其他人解决此类Shell兼容性问题。
答案 1 :(得分:1)
为什么要这么复杂?
#!/bin/ksh
typeset -i year=$( date +%Y )
(( year -= 1 ))
typeset rest=$( date +%m-%d )
echo "${year}-${rest}"
这应该在任何shell中都有效。如果使用sh替换
$( ... )
带反斜线
` ... `
但是对于bash和ksh,我使用$(...)-仅出于个人喜好。