根据bash中的变量格式化日期

时间:2013-07-19 15:38:17

标签: linux bash

如何让我的backup_filename函数根据传入的日期参数返回一个字符串(文件名)?

#!/bin/bash
DBNAME="user_db"
FILENAME="${DBNAME}_%Y_%m_%d.pg"

backup_filename() {
    echo `$1 +"$FILENAME"`
}

BACKUP_FILENAME=$(backup_filename `date -d '2 days'`)
echo $BACKUP_FILENAME

这会打印出错误line 6: Sun: command not found。我尝试了$FILENAME的不同引用策略,但没有太多运气。

3 个答案:

答案 0 :(得分:2)

试试这个,它应该让你非常接近你想要的东西:

#!/bin/bash
DBNAME="user_db"
FILENAME="${DBNAME}"

backup_filename() {
    BACKUP_FILENAME="${FILENAME}_${1}"
}

backup_filename `date -d '2 days' +%Y_%m_%d`
echo $BACKUP_FILENAME

答案 1 :(得分:0)

您可以尝试使用此脚本。它可以正常工作,您可以根据需要更改格式。对于更可自定义的函数,您将日期格式和文件名前缀作为参数传递:

#!/bin/bash
DBNAME="user_db"
FILENAME="${DBNAME}"
DATE_FORMAT="+%Y_%m_%d"

backup_filename() {
    BACKUP_FILENAME="${1}_"$(date -d "${2}" ${3})
}

backup_filename "$FILENAME" "2 days" "$DATE_FORMAT"
echo $BACKUP_FILENAME

答案 2 :(得分:0)

基于Dave S.回答我最终做到了这一点。

#!/bin/bash
DBNAME="user_db"
FILENAME="${DBNAME}_%Y_%m_%d.pg"

backup_filename() {
    echo $(date -d "${1} days" +"${FILENAME}")
}

BACKUP_FILENAME=$(backup_filename 2)
echo $BACKUP_FILENAME