CoderChris
CoderChris

Reputation: 1191

How can I get the output of a command into a bash variable?

I can't remember how to capture the result of an execution into a variable in a bash script.

Basically I have a folder full of backup files of the following format: backup--my.hostname.com--1309565.tar.gz

I want to loop over a list of all files and pull the numeric part out of the filename and do something with it, so I'm doing this so far:

HOSTNAME=`hostname`
DIR="/backups/"
SUFFIX=".tar.gz"
PREFIX="backup--$HOSTNAME--"
TESTNUMBER=9999999999


#move into the backup dir
cd $DIR

#get a list of all backup files in there
FILES=$PREFIX*$SUFFIX

#Loop over the list
for F in $FILES
do
    #rip the number from the filename
    NUMBER=$F | sed s/$PREFIX//g | sed s/$SUFFIX//g

   #compare the number with another number

   if [ $NUMBER -lg $TESTNUMBER ]
      #do something

   fi

done

I know the "$F | sed s/$PREFIX//g | sed s/$SUFFIX//g" part rips the number correctly (though I appreciate there might be a better way of doing this), but I just can't remember how to get that result into NUMBER so I can reuse it in the if statement below.

Upvotes: 4

Views: 338

Answers (2)

Paŭlo Ebermann
Paŭlo Ebermann

Reputation: 74800

Use the $(...) syntax (or ``).

NUMBER=$( echo $F | sed s/$PREFIX//g | sed s/$SUFFIX//g )

or

NUMBER=` echo $F | sed s/$PREFIX//g | sed s/$SUFFIX//g `

(I prefer the first one, since it is easier to see when multiple ones nest.)

Upvotes: 5

Michael Lowman
Michael Lowman

Reputation: 3068

Backticks if you want to be portable to older shells (sh):

NUMBER=`$F | sed s/$PREFIX//g | sed s/$SUFFIX//g`.

Otherwise, use NUMBER=$($F | sed s/$PREFIX//g | sed s/$SUFFIX//g). It's better and supports nesting more readily.

Upvotes: 0

Related Questions