如何将命令输出转换为bash变量?

时间:2011-06-17 15:08:52

标签: bash

我不记得如何将执行结果捕获到bash脚本中的变量中。

基本上我有一个文件夹,里面装满了以下格式的备份文件: backup--my.hostname.com--1309565.tar.gz

我想循环遍历所有文件的列表并从文件名中拉出数字部分并用它做一些事情,所以我到目前为止这样做:

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

我知道"$F | sed s/$PREFIX//g | sed s/$SUFFIX//g"部分正确地撕掉了这个数字(虽然我很欣赏可能有更好的方法),但我不记得如何将结果输入NUMBER以便我可以重复使用它在下面的if语句中。

2 个答案:

答案 0 :(得分:5)

使用$(...)语法(或``)。

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

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

(我更喜欢第一个,因为当多个嵌套时更容易看到。)

答案 1 :(得分:0)

如果你想要移植到较旧的shell(sh),可以反击:

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

否则,请使用NUMBER=$($F | sed s/$PREFIX//g | sed s/$SUFFIX//g)。它更好,更容易支持嵌套。