变量作为xpath的标记 - bash脚本(html)

时间:2017-04-06 08:27:59

标签: bash xpath

我目前正在尝试使用xpath从网页打印数据集。我遇到循环遍历一个标签数组的问题,如下例所示产生空的$ element变量:

declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');

COUNTER=1
for tag in "${Elements[@]}";
do
    element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
    echo  ELEMENT $COUNTER : $element 
    let COUNTER=COUNTER+1
done

如果我用xpath手动替换'$ tag'(.e.g具有以下内容:

element="$(curl -s http://mypage | xmllint --html --xpath '//*[@id="page-wrapper"]/div[1]' - 2>text.txt | tr -d 'a-z<>=""/')" \

一切都很完美。有什么想法我做错了什么?我认为围绕$ tag的语法有问题,但是我看不出我到底做错了什么。任何朝着正确方向的推动都会非常感激!

1 个答案:

答案 0 :(得分:1)

更改行

xmllint --html --xpath '$tag'

xmllint --html --xpath "$tag"

它的经验法则,单引号不扩展bash中的变量,你需要加倍引用它们。使用变量名称周围的单引号,剥夺$进行变量插值。

同样好的阅读,Expressions don't expand in single quotes, use double quotes for that.