2013-02-08 30 views
0

我想在程序xmllint的XPath中使用Bash變量。在程序XPath中使用Bash變量xmllint

下面的工作代碼說明我要實現整體的事情:

functionInformationTagContent="$(echo "${functionInformation}"\ 
       | xmllint --xpath '/functionInformation/description/text()' -\ 
       | xargs -i echo -n "{}")" 

以下非工作的代碼說明我要實現的具體的事情:

functionInformationTag="${1}" 
    functionInformationTagContent="$(echo "${functionInformation}"\ 
       | xmllint --xpath '/functionInformation/<clever code>"${functionInformationTag}"<clever code>/text()' -\ 
       | xargs -i echo -n "{}")" 

你可以看到,我希望能夠在XPath參數中使用Bash變量用於泛化。你知道我可以怎樣做到這一點嗎?你能指出我正確的方向嗎?

非常感謝您的幫助!

+0

你有沒有試圖消除周圍的變量引號? – slezica 2013-02-08 18:54:45

+0

我確實已經嘗試從XPath中使用變量functionInformationTag時刪除引號。不幸的是,錯誤是一樣的(無效的表達式和一個箭頭指向違規字符 - 無論是「或$」)。感謝您的幫助。 – d3pd 2013-02-08 19:04:01

+0

有可能我的問題可以概括爲Bash變量的擴展在單引號內,解決問題的方法是在XPath參數中使用雙引號而不是單引號 – d3pd 2013-02-08 19:11:03

回答

4

您的第二條評論非常接近正確。

回想一下,當最外面的引號是單引號時,變量永遠不會被擴展。您應該能夠在單引號和dbl引號之間來回切換,只要它們互相「接觸」以將字符串保留爲一個參數即可。嘗試:

xmllint --xpath '/functionInformation/<clever code>'"${functionInformationTag}"'<clever code>/text()' -\ 
#--------------------------------------------------^^-------------------------^^---- 

IHTH

+0

這非常好,非常感謝您的幫助! – d3pd 2013-02-12 19:17:04