我目前正在尝试使用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的语法有问题,但是我看不出我到底做错了什么。任何朝着正确方向的推动都会非常感激!
答案 0 :(得分:1)
更改行
xmllint --html --xpath '$tag'
到
xmllint --html --xpath "$tag"
它的经验法则,单引号不扩展bash
中的变量,你需要加倍引用它们。使用变量名称周围的单引号,剥夺$
进行变量插值。
同样好的阅读,Expressions don't expand in single quotes, use double quotes for that.