3

当我备份一个文件时,我会为其添加一个时间戳。

例如:

$ 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

4

5 回答 5

3

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

$ DATE="date +%F"
$ echo $DATE
date +%F
$ echo `$DATE`
2012-06-20
于 2012-06-20T06:00:20.797 回答
3

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

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

.profile如果您不想乱扔垃圾,这很简单,可以作为您的一项功能$HOME/bin使用。

于 2012-06-20T07:37:55.453 回答
1

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

#!/usr/bin/env ksh

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

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

除了可能通过它们各自的可加载扩展接口之外,我不知道有任何其他 shell 可以做到这一点。

于 2012-06-20T07:51:12.347 回答
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
于 2012-06-20T11:23:43.660 回答
0

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

于 2012-06-20T05:55:31.897 回答