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

时间:2012-06-20 05:52:14

标签: 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

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

您正在从错误的角度攻击问题。编写一个创建备份的脚本。

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

这很简单,如果你不想让你的.profile基本上只用一行,就可以在你的$HOME/bin中使用。

答案 2 :(得分:1)

Bash没有这样的功能。如果你需要getter / setters / properties,以及通常需要OO的任何东西,你应该使用ksh93的纪律函数

#!/usr/bin/env ksh

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

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

除了可能通过各自的可加载扩展接口之外,我不知道任何其他可以执行此操作的shell。

答案 3 :(得分:1)

Bash有一个自动更新的变量,其中包含自shell启动以来的秒数。

您可以设置该值,它将从该基础开始更新。缺点是它使用了纪元秒时间戳格式。您可以使用date将其转换回来。

这是一个演示:

$ 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

答案 4 :(得分:0)

您需要编辑bash源代码才能提供它。但请确保在做之前知道每个人想要约会的格式。