当我备份一个文件时,我会为其添加一个时间戳。
例如:
$ 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
?
当我备份一个文件时,我会为其添加一个时间戳。
例如:
$ 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
?
您可以保留命令语句并在使用时对其进行评估。
$ DATE="date +%F"
$ echo $DATE
date +%F
$ echo `$DATE`
2012-06-20
你从错误的角度解决问题。编写一个创建备份的脚本。
#!/bin/sh
for f; do
cp "$f" "$f.$(date +%F).bk"
done
.profile
如果您不想乱扔垃圾,这很简单,可以作为您的一项功能$HOME/bin
使用。
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 启动以来的秒数。
您可以设置该值,它将从该基础开始更新。缺点是它使用纪元秒时间戳格式。您可以使用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
您需要编辑 bash 源代码才能提供它。但请确保在执行之前知道每个人都希望他们的日期采用什么格式。