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

3
当我备份一个文件时,我会在文件名中添加时间戳。
例如:
$ DATE=$(date +%F)
$ cp file{,.$DATE.bk}
$ ls
file  file.2012-06-20.bk

有一个Bash变量RANDOM,每次我echo它,它会给我不同的值:

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

我该如何定义这种类型的变量DATE
5个回答

3
您可以保留命令语句并在使用时进行评估。
$ DATE="date +%F"
$ echo $DATE
date +%F
$ echo `$DATE`
2012-06-20

3
你从错误的角度解决问题。编写一个脚本来创建备份。
#!/bin/sh
for f; do
    cp "$f" "$f.$(date +%F).bk"
done

这很简单,如果你不想在$HOME/bin中放置基本上是一行代码的内容,那么可以将其作为一个函数放入您的.profile中。

2
Bash没有这样的功能。如果您需要getter/setter/属性以及通常需要OO的任何内容,您应该使用ksh93的“displine functions”。
#!/usr/bin/env ksh

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

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

除了它们各自的可加载扩展接口,我不知道还有哪个其他的 shell 能够做到这一点。


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

0

您需要编辑bash源代码以提供此功能。但在进行操作之前,请确保您知道每个人想要的日期格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接