Shell 如何将环境变量传递给传递给xmllint的命令?

Shell 如何将环境变量传递给传递给xmllint的命令?,shell,sed,environment-variables,Shell,Sed,Environment Variables,我正试图使用xmllint从xml文件中提取db元素的value属性 我的XPath查询需要定位到正确的dbtype,我希望将其存储在环境变量中 如果没有环境变量(硬编码),此命令可以工作 echo 'cat //rdbmsinfo/dbtype[@value="sqlserver"]/db/@value' | xmllint --shell "config.xml" | grep -v ">" | cut -f 2 -d "=" | tr -d \ | sed 's/"//g' 我正在

我正试图使用
xmllint
从xml文件中提取
db
元素的
value
属性

我的XPath查询需要定位到正确的dbtype,我希望将其存储在环境变量中

如果没有环境变量(硬编码),此命令可以工作

echo 'cat //rdbmsinfo/dbtype[@value="sqlserver"]/db/@value' | xmllint --shell "config.xml" | grep -v ">" | cut -f 2 -d "=" | tr -d \ | sed 's/"//g'
我正在使用以下命令进行尝试:

echo 'cat //rdbmsinfo/dbtype[@value="$ldb_source_typ"]/db/@value' | xmllint --shell "config.xml" | grep -v ">" | cut -f 2 -d "=" | tr -d \ | sed 's/"//g'
其中,
ldb\u source\u typ
是一个变量,用于从shell参数中获取值,即
“sqlserver”
。但是上面的语法没有给出任何输出

为什么这不起作用,我怎样才能修复它

我的config.xml如下所示:

<?xml version="1.0"?>
<rdbmsinfo>
  <dbtype value="sqlserver">
    <db value="sqlsrv1">
      <dbhostip>192.168.0.1</dbhostip>
      <dbhostportno>2000</dbhostportno>
      <dbusername>sample</dbusername>
      <dbpassword>sample</dbpassword>
    </db>
    <db value="sqlsrv2">
      <dbhostip>192.168.0.2</dbhostip>
      <dbhostportno>2000</dbhostportno>
      <dbusername>sample</dbusername>
      <dbpassword>sample</dbpassword>
    </db>
  </dbtype>
  <dbtype value="postgresql">
    <db value="postsql1">
    </db>
  </dbtype>
</rdbmsinfo>

192.168.0.1
2000
样品
样品
192.168.0.2
2000
样品
样品

我通过以下几点实现了这一点:

echo "cat //rdbmsinfo/dbtype[@value="ldb_source_type"]/db/@value" | sed 's/ldb_source_type/"'$SQLSERVER'"/g' | xmllint --shell config.xml| grep -v ">" | cut -f 2 -d "=" | tr -d \ | sed 's/"//g'
将生成以下输出:

sqlsrv1
-------
sqlsrv2
我不太关心如何使值占位符使用$symbol,我可能最终会回来编辑它

编辑:这是一个带$的,但您需要用一个:

echo "cat //rdbmsinfo/dbtype[@value="\$ldb_source_type"]/db/@value" | sed 's/\$ldb_source_type/"'$SQLSERVER'"/g'| xmllint --shell config.xml| grep -v ">" | cut -f 2 -d "=" | tr -d \ | sed 's/"//g'

正如我刚刚发现的,您需要在单引号(')之间设置环境变量

因此,以下措施应该有效:

echo 'cat //rdbmsinfo/dbtype[@value="'$ldb_source_typ'"]/db/@value' | xmllint --shell "config.xml" | grep -v ">" | cut -f 2 -d "=" | tr -d \ | sed 's/"//g'