在bash中,如何在字符串中插入$(...)?

时间:2014-05-14 13:03:25

标签: bash shell string-interpolation

我正在尝试编写一个bash脚本,在我的实时站点的数据库上执行mysqldump,然后添加并将转储提交到git存储库。这是我到目前为止(存储在由crontab条目调用的.sh文件中):

/usr/bin/mysqldump --skip-comments --skip-dump-date -u [user] -p[pass] database | gzip > /var/www/site/backup/database.sql.gz
cd var/www/site/backup && git add *
cd var/www/site/backup && git commit -m 'Database $(date +%a %H:%M %h %d %Y)'

我的crontab条目如下所示:

0,20,40 8-22 * * * /var/www/site/backup/script.sh

我可以看到这个脚本会转储数据库,但不会将文件添加或提交给git。有什么东西我错过了吗?

编辑=================================

我做了以下更改,提交工作正在进行:

cd /var/www/site/backup && /usr/bin/git add *
cd /var/www/site/backup && /usr/bin/git commit -m 'Database $(date +%a %H:%M %h %d %Y)'

但是,日期不会计算。

编辑=================================

最新修订,包括(大部分)建议

/usr/bin/mysqldump --skip-comments --skip-dump-date -u [user] -p[pass] database > /var/www/site/backup/database.sql
cd var/www/site/backup
/usr/bin/git add *
/usr/bin/git commit -m "Internal Forms Live Database Dump Stored $(date '+%a %H:%M %h %d %Y')"

1 个答案:

答案 0 :(得分:33)

$(...)other forms of substitutions are not interpolated in single-quoted strings

因此,如果您想要计算日期,请执行

git commit -m "Database $(date '+%a %M:%H %h %d %Y')"

也就是说,整个消息字符串是双引号以允许插入$(...),而date的参数是单引号,以使其成为单个参数(传递给date })。