如何在bash中定义自动更新$DATE变量?

如何在bash中定义自动更新$DATE变量?,bash,Bash,当我备份一个文件时,我会给它添加一个时间戳 例如: $ DATE=$(date +%F) $ cp file{,.$DATE.bk} $ ls file file.2012-06-20.bk 有一个bash变量RANDOM,每次我回显它时,它都会给我不同的值: $ echo $RANDOM 20511 $ echo $RANDOM 12577 $ echo $RANDOM 32433 如何定义此类变量DATE?您需要编辑bash源代码才能提供它。但在执行之前,请确保您知道每个人都希望他们的

当我备份一个文件时,我会给它添加一个时间戳

例如:

$ DATE=$(date +%F)
$ cp file{,.$DATE.bk}
$ ls
file  file.2012-06-20.bk
有一个bash变量
RANDOM
,每次我回显它时,它都会给我不同的值:

$ echo $RANDOM
20511
$ echo $RANDOM
12577
$ echo $RANDOM
32433

如何定义此类变量
DATE

您需要编辑bash源代码才能提供它。但在执行之前,请确保您知道每个人都希望他们的日期采用什么格式。

您可以保留命令语句,并在使用时对其进行评估

$ DATE="date +%F"
$ echo $DATE
date +%F
$ echo `$DATE`
2012-06-20

你从错误的角度来解决这个问题。编写一个创建备份的脚本

#!/bin/sh
for f; do
    cp "$f" "$f.$(date +%F).bk"
done

如果您不想在
$HOME/bin
中基本上只使用一行代码,那么这非常简单,可以作为
.profile
中的函数使用。

Bash没有这样的功能。如果需要getter/setter/properties,通常需要OO的任何东西,那么应该使用ksh93的规程函数

#!/usr/bin/env ksh

function DATE.get {
    .sh.value=$(printf '%(%F)T')
}

cp file{,".${DATE}.bk"}

除了通过各自的可加载扩展接口之外,我不知道还有其他shell可以这样做。

Bash有一个自动更新的变量,该变量包含shell启动后的秒数

您可以设置该值,它将从该基数开始更新。缺点是它使用历元秒时间戳格式。您可以使用
日期
将其转换回

下面是一个演示:

$ bash
$ echo "$SECONDS"
5
$ date +%s; SECONDS=$(date +%s); echo "$SECONDS"
1340191083
1340191083
$ sleep 10
$ date +%s; echo "$SECONDS"
1340191097
1340191097
$ date -d "@$SECONDS"
Wed Jun 20 06:18:24 CDT 2012
$ date -d "@$SECONDS" +%F
2012-06-20
额外的秒数是因为Bash的启动时间和键入命令所需的时间

$ bash -c 'echo $SECONDS'
0