6

I have the following excerpt from a bash script used to backup a database

#!/bin/bash DB=database_name DBUSER=username FILENAME=$DB_$(date +%s).sql 

I am trying to reuse the value of DB within the FILENAME variable assignment, but it won't let me use substitution this way. I just get the timestamp for the file name.

Is it possible to achieve what I want, and if so what is the syntax?

thanks.

3 Answers 3

8

The problem is that bash does not know that you mean $DB instead of $DB_ (which is a perfectly valid name for a variable).

The best option is to be explicit on the name of the variable using braces around its name:

FILENAME=${DB}_$(date %s).sql 

This saves you the trouble of escaping other characters which are not to be interpreted as part of a variable name.

1
  • I ended up accepting this answer as I found it more complete. I also find the braces to be more readable. Thanks. Commented Sep 8, 2011 at 5:27
4

Alternately, use braces to isolate your variable. I think it's a bit clearer than putting quotes in there.

FILENAME=${DB}_$(date +%s).sql 
1
  • Also works within quotes: FILENAME="${DB}_$(date +%s)" if you want to embed stars or spaces or something. Commented Sep 8, 2011 at 4:15
2

Enclose the underscore in double quotes (or single quotes for the stronger):

#!/bin/bash DB=database_name DBUSER=username FILENAME=$DB"_"$(date +%s).sql 
1
  • Legend. It won't let me accept this for 9 minutes, but you have made me a momentarily happy man. Cheers. Commented Sep 8, 2011 at 4:05

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.