0
#!/bin/bash

host=${1-localhost}
port=${2-27017}
dbname=${3-ascq}

MONGOBKDIR=./mongo_data/ascq
echo "restore data from $MONGOBKDIR"

dbs=$(mongo $host:$port --eval 'printjson(db.adminCommand("listDatabases"))' | \
            grep -oP '"name" : "${dbname}\d*"' | \
            awk '{print $3}' | tr -d '"')

for i in $dbs
do
    echo "restoring:$i"
    mongorestore -h $host:$port -d $i --drop $MONGOBKDIR/
done

exit 0

我想在 grep 中使用 ${dbname} 但失败了。

4

2 回答 2

3

您正在使用单引号,这会阻止变量的扩展。

使用双引号:

grep -oP "name : ${dbname}\d*"

如果您还想匹配"模式中的引号,请转义:

grep -oP "\"name\" : \"${dbname}\d*\""
于 2013-08-16T06:38:15.843 回答
3

试试grep -oP '"name" : "'${dbname}'\d*"'

在撇号(单引号)内,不会发生变量扩展。

我假设输入包含您要匹配的引号(双引号),如

"name" : "sales34567"
"name" : "payroll34567"
于 2013-08-16T06:44:28.270 回答